Я создаю сценарий для автоматического переноса изменений из нескольких баз данных разработки в промежуточную / производственную. По сути, он берет кучу сценариев изменений и объединяет их в один сценарий, заключая каждый сценарий в IF whatever BEGIN ... END
оператор.
Однако для некоторых сценариев требуется GO
оператор, чтобы, например, синтаксический анализатор SQL знал о новом столбце после его создания.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Однако, как только я заключу это в IF
блок:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Это не удается, потому что я отправляю BEGIN
без соответствия END
. Однако, если я удалю, GO
он снова жалуется на неизвестный столбец.
Есть ли способ создать и обновить один и тот же столбец в одном IF
блоке?