Odpowiedzi:
Opcjonalnie możesz początkowo utworzyć kolumnę z możliwością zerowania, następnie zaktualizować kolumnę tabeli prawidłowymi wartościami niepustymi, a na końcu ALTER kolumnę, aby ustawić ograniczenie NOT NULL:
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
Inną opcją jest określenie prawidłowej wartości domyślnej dla kolumny:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Zwróć uwagę, że powyższa odpowiedź zawiera, GO
co jest konieczne, gdy uruchamiasz ten kod na serwerze Microsoft SQL. Jeśli chcesz wykonać tę samą operację na Oracle lub MySQL, musisz użyć średnika w ;
ten sposób:
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
stwierdzenie, o którym wspomniałeś, byłoby szkodliwe w każdym zapytaniu. Powinno być wystarczająco proste, aby sprawdzić, czy w update
wyciągu znajduje się dodatkowa kolumna . Zwykle dodajesz tylko jedną lub dwie kolumny naraz. Jeśli zdarzy ci się dodać do update
wyciągu dodatkową kolumnę, która w tym przypadku nie należy, to może nie powinieneś przede wszystkim odpowiadać za dane.
ALTER COLUMN
NIE jest on obsługiwany w SQLite.
GO
i wydaje się, że nie jest to część specyfikacji SQL , dlatego prawdopodobnie doprowadzi to do awarii skryptów, które nie zostaną wykonane przez jedno z narzędzi, które ją obsługują. Po prostu użyj średników? Nie polecam rozpowszechniania standardów Microsoftu, ponieważ rzadko dbają oni o jakiś ustalony i rozsądny standard, ale wymyślają własne, aby mieć własne. Poza tym pomocna odpowiedź.
Jeśli nie pozwalasz, aby kolumna miała wartość Null, musisz podać wartość domyślną, aby zapełnić istniejące wiersze. na przykład
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
W wersji Enterprise jest to zmiana metadanych dopiero od 2012 roku
Inne implementacje SQL mają podobne ograniczenia. Powodem jest to, że dodanie kolumny wymaga dodania wartości dla tej kolumny (logicznie, nawet jeśli nie fizycznie), która domyślnie NULL
. Jeśli nie pozwolisz NULL
i nie masz default
, jaka będzie wartość?
Ponieważ SQL Server obsługuje ADD CONSTRAINT
, polecam podejście Pawła polegające na utworzeniu kolumny dopuszczającej wartość null, a następnie dodaniu NOT NULL
ograniczenia po wypełnieniu go NULL
wartościami niebędącymi wartościami.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"