Dodawanie kolumny do tabeli z istniejącymi rekordami z wypełnieniem przez DEFAULT

17-lis-2012

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

Komentarze są wyłączone

Autor: Rafał Kraik