Kiedy tabela ma już rekordy, a chcesz dodać do niej kolumnę NOT NULL, to koniecznie musisz określić DEFAULT. Co jednak zrobić, jeżeli kolumna, którą dodajesz do tabeli akceptuje wartości NULL, a ty chcesz aby kolumna ta była wypełniona odpowiednimi wartościami?
Popatrz na ten przykład:
USE tempdb
CREATE TABLE TableNulls
(Id INT IDENTITY,
value INT NOT NULL)
INSERT TableNulls VALUES(10),(20)
Dodaj nową kolumnę dopuszczającą wartość NULL i ze zdefiniowanym constrainem DEFAULT:
ALTER TABLE TableNulls ADD newValue INT NULL CONSTRAINT TN_DF_New0 DEFAULT 0
SELECT * FROM TableNulls
Jak widać, rekordy przyjęły wartość NULL, bo przecież była ona dopuszczalna! Usuńmy więc constraina i kolumnę.
ALTER TABLE TableNulls DROP CONSTRAINT TN_DF_New0
ALTER TABLE TableNulls DROP COLUMN newValue
A teraz ponownie dodajmy kolumnę i constrain DEAFULT ale tym razem z klauzulą WITH VALUES. Oznacza ona, że generując nowe wartości dla dodawnaej kolumny należy użyć wartości wygenerowanych przez default, a nie pozostaniać je puste:
ALTER TABLE TableNulls ADD newValue INT NULL CONSTRAINT TN_DF_New0 DEFAULT 0 WITH VALUES
SELECT * FROM TableNulls