我的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}}
答案 0 :(得分:0)
我很想以不同的方式处理它,你可以拥有项目中的身份,但使用部署贡献者来阻止它部署在你不需要它的环境中。
您应该能够使用我的通用或自己写一个: