我正在生成一个脚本,用于自动将更改从多个开发数据库迁移到临时/生产环境。基本上,它采用一组变更脚本,并将它们合并到单个脚本中,将每个脚本包装在 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
它失败是因为我发送了一个没有匹配 END
的 BEGIN
。但是,如果我删除 GO
,它会再次抱怨一个未知的列。
有没有办法在一个 IF
块中创建和更新同一列?