/ / Як я можу додати стандарт для стовпця та оновити всі рядки за замовчуванням в одному пакеті в SQL Server? - sql-сервер, пакетний файл, за замовчуванням

Як я можу додати стандарт для стовпця та оновити всі рядки за замовчуванням в одному пакеті в SQL Server? - sql-сервер, пакетний файл, за замовчуванням

Я намагаюся виконати наступний код як частину міграції в транзакції, але код не працює, якщо я не встановлю 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 для відповіді № 1

Ви можете використовувати 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 для відповіді № 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 для відповіді № 3

Я закінчився цим, що робить все в одному твердженні:

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

Працює з SQL Server.