Я генерирую script для автоматической миграции изменений из нескольких баз данных разработки в процесс постановки/производства. В принципе, он берет кучу скриптов изменений и объединяет их в один script, обертывая каждый script в инструкции 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?