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, GOco 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;
updatestwierdzenie, o którym wspomniałeś, byłoby szkodliwe w każdym zapytaniu. Powinno być wystarczająco proste, aby sprawdzić, czy w updatewyciągu znajduje się dodatkowa kolumna . Zwykle dodajesz tylko jedną lub dwie kolumny naraz. Jeśli zdarzy ci się dodać do updatewyciągu dodatkową kolumnę, która w tym przypadku nie należy, to może nie powinieneś przede wszystkim odpowiadać za dane.
ALTER COLUMNNIE jest on obsługiwany w SQLite.
GOi 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 NULLi 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 NULLograniczenia po wypełnieniu go NULLwartoś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"