it-swarm.com.de

fügen Sie eine NOT NULL-Spalte in eine vorhandene Tabelle ein

Ich habe versucht:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

Aber es gibt diese Fehlermeldung:

ALTER TABLE erlaubt nur das Hinzufügen von Spalten, die Nullen oder .__ enthalten können. haben eine DEFAULT-Definition angegeben

100
ANP

Als Option können Sie zunächst eine Null-fähige Spalte erstellen, Ihre Tabellenspalte dann mit gültigen Werten außer Null aktualisieren und schließlich die ALTER-Spalte, um die NOT NULL-Einschränkung festzulegen:

ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO

Eine andere Option ist, den korrekten Standardwert für Ihre Spalte anzugeben:

ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'

UPD: Bitte beachten Sie, dass die Antwort oben GO enthält. Dies ist ein Muss, wenn Sie diesen Code auf einem Microsoft SQL-Server ausführen. Wenn Sie dieselbe Operation unter Oracle oder MySQL ausführen möchten, müssen Sie das Semikolon ; wie folgt verwenden:

ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
185

Wenn Sie nicht zulassen, dass die Spalte NULL ist, müssen Sie einen Standard angeben, um vorhandene Zeilen aufzufüllen. z.B.

ALTER TABLE dbo.YourTbl ADD
    newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0

Bei der Enterprise Edition ist dies eine Änderung von Metadaten seit 2012

11
Martin Smith

Die Fehlermeldung ist ziemlich beschreibend, versuchen Sie:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
5
a'r

Andere SQL-Implementierungen haben ähnliche Einschränkungen. Der Grund dafür ist, dass das Hinzufügen einer Spalte das Hinzufügen von Werten für diese Spalte erfordert (logisch, auch wenn nicht physisch), die standardmäßig NULL ist. Wenn Sie nicht NULL zulassen und keinen default haben, wie lautet der Wert?

Da SQL Server ADD CONSTRAINT unterstützt, würde ich empfehlen, dass Pavel eine nullwertfähige Spalte erstellt und dann eine NOT NULL-Einschränkung hinzufügt, nachdem Sie sie mit Werten gefüllt haben, die keine Variablen vom Typ NULL sind.

3
dan04

Das funktionierte für mich, kann auch aus der Entwurfsansicht "ausgeliehen" werden, Änderungen vornehmen -> Rechtsklick -> Änderungsskript erzeugen.

BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
    YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
2
pabbie
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
1
ajoejoseph
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"
0
AKronis1369