gpt4 book ai didi

sql - TSQL - 如何在 BEGIN .. END block 内使用 GO?

转载 作者:行者123 更新时间:2023-12-01 16:59:23 25 4
gpt4 key购买 nike

我正在生成一个脚本,用于自动将更改从多个开发数据库迁移到登台/生产。基本上,它需要一堆更改脚本,并将它们合并到一个脚本中,将每个脚本包装在 IF 不管 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 block 中:

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 block 中创建和更新同一列?

最佳答案

我遇到了同样的问题,最后设法使用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 block 内使用 GO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6376866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com