在SSDT部署后脚本中使用“GO”

时间:2015-03-03 21:13:11

标签: tsql sql-server-2008-r2 sql-server-data-tools

我的SQL Server 2008 R2数据库是从我创建的SSDT项目中部署的。在这种情况下,一个奇怪的要求是将一个主键列更改为IDENTITY或从ALTER TABLE ADD更改,具体取决于它的部署位置。我对此要求并不满意,但这不是我的问题。

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

在我的脚本中,我正在执行UPDATE命令来设置新列,填充它并将其重命名为旧列。在此之后,我尝试对新列进行GO,因为列不存在而导致故障。我在ALTER TABLE ADD命令下放了一个-- 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

但是,在部署后脚本的上下文中,这似乎不合法。如果BuildAction到位,我会在那里收到构建错误:

  

错误:SQL72007:语法检查失败'意外的文件结束发生。'在批次附近

我该如何解决这个问题?文件中的IF @IsDeploymentToDatacenter = 'TRUE' :r .\FixIdColumnInCommunicationTable.SQL 设置为"无"我认为是正确的。

更新:虽然错误来自子脚本,但我最终还是回到了父级。如果我这样做:

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

它有效。如果我这样做(我原来的),它会因我描述的错误而失败:

{{1}}

1 个答案:

答案 0 :(得分:0)

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

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

相关问题