Antworten:
Optional können Sie zunächst eine Null-fähige Spalte erstellen und dann Ihre Tabellenspalte mit gültigen Nicht-Null-Werten und schließlich die ALTER-Spalte aktualisieren, 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 besteht darin, 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 obige Antwort Folgendes enthält, GO
was ein Muss ist, 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 folgende Semikolon 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;
update
Aussage, die Sie erwähnen, würde sich bei jeder Abfrage nachteilig auswirken. Es sollte einfach genug sein, um festzustellen, ob die update
Anweisung hier eine zusätzliche Spalte enthält . Im Allgemeinen fügen Sie jeweils nur eine oder zwei Spalten hinzu. Wenn Sie Ihrer update
Anweisung in diesem Beispiel eine zusätzliche Spalte hinzufügen , die nicht dorthin gehört, sollten Sie möglicherweise nicht in erster Linie für die Daten verantwortlich sein.
ALTER COLUMN
dies in SQLite NICHT unterstützt wird.
GO
und es scheint nicht Teil der SQL-Spezifikation zu sein . Daher wird es wahrscheinlich zu Fehlern bei Skripten führen, die nicht von einem der Tools ausgeführt werden, die es unterstützen. Verwenden Sie einfach Semikolons? Ich empfehle nicht, Microsoft-Standards zu verbreiten, da sie sich selten um einen etablierten und vernünftigen Standard kümmern, sondern ihre eigenen erfinden, nur um ihre eigenen erfinden zu lassen. Ansonsten hilfreiche Antwort.
Wenn Sie nicht zulassen, dass die Spalte Null ist, müssen Sie einen Standardwert zum Auffüllen vorhandener Zeilen angeben. z.B
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
In der Enterprise Edition ist dies eine Änderung der Metadaten seit 2012
Andere SQL-Implementierungen unterliegen ähnlichen Einschränkungen. Der Grund dafür ist, dass für das Hinzufügen einer Spalte das Hinzufügen von Werten für diese Spalte erforderlich ist (logisch, auch wenn nicht physisch) NULL
. Wenn Sie nicht zulassen NULL
und keine haben default
, wie hoch wird der Wert sein?
Da SQL Server unterstützt ADD CONSTRAINT
, würde ich Pavel empfehlen, eine nullfähige Spalte zu erstellen und dann eine NOT NULL
Einschränkung hinzuzufügen , nachdem Sie sie mit Nichtwerten gefüllt NULL
haben.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"