gpt4 book ai didi

tsql - 在 SSDT 部署后脚本中使用 "GO"

转载 作者:行者123 更新时间:2023-12-01 20:25:45 29 4
gpt4 key购买 nike

我的 SQL Server 2008 R2 数据库是从我创建的 SSDT 项目部署的。在这种情况下,一个奇怪的要求是根据它的部署位置将其中一个主键列更改为 IDENTITY 或从 IDENTITY 更改。我对这个要求并不狂热,但这不是我的问题。

我所做的是设置一个部署后脚本,该脚本应有条件地运行,具体取决于部署发生的位置。到目前为止,还不错。

在我的脚本中,我正在执行 ALTER TABLE ADD 命令来设置一个新列,填充它并将其重命名为旧列。在此之后,我尝试对新列执行 UPDATE 操作,但由于该列不存在而出现故障。我在 ALTER TABLE ADD 命令下放置了一个 GO 语句,当我单独测试运行脚本时,这解决了问题,一切正常。

-- Add a clone of the ID column with no Identity constraint
ALTER TABLE Communication ADD CommunicationIdNoIdentity INT NOT NULL;
GO
UPDATE Communication
SET CommunicationIdNoIdentity = CommunicationID;

然而,这在部署后脚本的上下文中似乎是不合法的。在 GO 就位后,我在那里得到一个构建错误:

Error: SQL72007: The syntax check failed 'Unexpected end of file occurred.' in the batch near

我该如何解决这个问题?文件上的 BuildAction 设置为“None”,我认为这是正确的。

更新:虽然错误是从子脚本发出的,但我最终还是将它反馈给了父脚本。如果我这样做:

IF @IsDeploymentToDatacenter = 'TRUE'
:r .\FixIdColumnInCommunicationTable.SQL

它有效。如果我这样做(我最初所做的),它将失败并出现我描述的错误,其中包括:

IF @IsDeploymentToDatacenter = 'TRUE'
BEGIN
:r .\FixIdColumnInCommunicationTable.SQL
END

最佳答案

我很想以不同的方式处理它,您可以在项目中拥有身份,但使用部署贡献者来阻止它部署在您不需要它的环境中。

你应该能够使用我的通用的或者你自己写一个:

关于tsql - 在 SSDT 部署后脚本中使用 "GO",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841996/

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