Как добавить значение по умолчанию для столбца и обновить все строки значением по умолчанию в одном пакете в SQL Server? - PullRequest
0 голосов
/ 03 мая 2011

Я пытаюсь выполнить следующий код как часть миграции в транзакции, но код завершится ошибкой, если я не поставлю оператор GO после оператора ADD CONSTRAINT:

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

Если япропустив оператор GO, я получаю следующую ошибку:

Неверное имя столбца 'C'.

Код, выполняющий миграцию, не может обработать оператор GOКак я могу заставить это работать в одной транзакции?

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

Вы можете использовать EXEC для проблемных операторов, чтобы они компилировались как другой пакет.

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

Но вы также можете сделать

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

Вместо того, чтобы делать все этиотдельные шаги сами.

0 голосов
/ 05 мая 2011

Я закончил с этим, который делает все в одном утверждении:

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

Работает с SQL Server.

0 голосов
/ 03 мая 2011
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;
...