/ / Jak dodać wartość domyślną dla kolumny i zaktualizować wszystkie wiersze z wartością domyślną w jednej partii w programie SQL Server? - sql-server, plik wsadowy, domyślnie

Jak mogę dodać wartość domyślną dla kolumny i zaktualizować wszystkie wiersze z wartością domyślną w jednej partii w programie SQL Server? - sql-server, plik wsadowy, domyślnie

Próbuję wykonać następujący kod jako część migracji w transakcji, ale kod nie powiedzie się, chyba że umieściłem GO oświadczenie po ADD CONSTRAINT komunikat:

ALTER TABLE T ADD C INT NULL
ALTER TABLE T ADD CONSTRAINT DF_T_C DEFAULT ((1)) FOR C
GO
UPDATE T SET C = DEFAULT
ALTER TABLE T ALTER COLUMN C INT NOT NULL

Jeśli pominę GO oświadczenie Otrzymuję następujący błąd:

Nieprawidłowa nazwa kolumny "C".

Kod wykonujący migrację nie może obsłużyć GO oświadczenie, w jaki sposób mogę uruchomić to w pojedynczej transakcji?

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz użyć EXEC dla problematycznych stwierdzeń, więc są kompilowane jako inna partia.

EXEC("UPDATE T SET C = DEFAULT;
ALTER TABLE T ALTER COLUMN C INT NOT NULL")

Ale możesz też zrobić

ALTER TABLE T ADD C INT NOT NULL CONSTRAINT DF_T_C DEFAULT ((1))

Zamiast wykonywać wszystkie te indywidualne kroki samodzielnie.


0 dla odpowiedzi nr 2
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET XACT_ABORT ON;

BEGIN TRANSACTION;

ALTER TABLE T ADD C INT NULL;

ALTER TABLE T ADD CONSTRAINT DF_T_C DEFAULT ((1)) FOR C;
EXEC ("UPDATE T SET C = DEFAULT");

ALTER TABLE T ALTER COLUMN C INT NOT NULL;

COMMIT TRANSACTION;

-2 dla odpowiedzi nr 3

Skończyło się to, co robi wszystko w jednym stwierdzeniu:

ALTER TABLE T ADD C INT NOT NULL CONSTRAINT DF_T_C DEFAULT ((1)) WITH VALUES

Działa z serwerem SQL.