Próbowałem:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Ale daje ten komunikat o błędzie:
ALTER TABLE umożliwia dodawanie tylko kolumn, które mogą zawierać wartości null lub mieć określoną definicję DEFAULT
Próbowałem:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Ale daje ten komunikat o błędzie:
ALTER TABLE umożliwia dodawanie tylko kolumn, które mogą zawierać wartości null lub mieć określoną definicję DEFAULT
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 wupdate
wyciągu znajduje się dodatkowa kolumna . Zwykle dodajesz tylko jedną lub dwie kolumny naraz. Jeśli zdarzy ci się dodać doupdate
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
W wersji Enterprise jest to zmiana metadanych dopiero od 2012 roku
źródło
Komunikat o błędzie jest dość opisowy, spróbuj:
źródło
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 pozwoliszNULL
i nie maszdefault
, 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 dodaniuNOT NULL
ograniczenia po wypełnieniu goNULL
wartościami niebędącymi wartościami.źródło
U mnie to zadziałało, można je też „pożyczyć” z widoku projektu, wprowadzić zmiany -> prawy przycisk myszy -> wygenerować skrypt zmiany.
źródło
źródło
źródło