我正在生成一个脚本,用于将更改从多个开发数据库自动迁移到暂存/生产。基本上,它需要一堆更改脚本,并将它们合并为一个脚本,将每个脚本包装在 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
块中创建和更新同一列? 最佳答案
我遇到了同样的问题,最后设法使用 SET NOEXEC 解决了它。
IF not whatever
BEGIN
SET NOEXEC ON;
END
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
SET NOEXEC OFF;
关于sql - TSQL - 如何在 BEGIN .. END 块中使用 GO?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6376866/