2016-02-01 39 views
0

我在TeamCity中通过构建一个sql项目来创建一个DacPac。生成的DacPac有一个后期部署脚本,我希望在部署时或在使用版本号创建之前更新脚本。是否可以在TeamCity中或在部署DacPac中设置此参数?在DacPac中发布部署参数

的sqlpackage.exe命令行看起来像

C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /Action:Publish /Sourcefile:#{SourceFolder} /TargetDatabaseName:DBName /TargetServerName:#{SqlServer} 

其中 “#{}” 是章鱼参数部署服务器。在SQL项目的后期部署脚本的样子:

declare @version varchar(10) 
set @version = 'z' 
IF EXISTS (SELECT * FROM tVersion) 
UPDATE VersionTable SET Version = @version 
ELSE 
INSERT INTO VersionTable VALUES (@version) 

的路上我一直在做的是通过使用TeamCity的文件内容替换替换“Z”有版本号,但这种方法是不理想的。如果另一个开发人员使用与文件内容替换器构建功能中使用的正则表达式不匹配的其他参数检查文件,这可能会导致将来出现错误。

回答

2

你可以采取几种不同的方法,第一种方法是在你的.sqlproj(项目的属性,SQLCMD变量选项卡)中定义一个SqlCmd变量,并引用它是你的post部署脚本。部署时,可以使用/ v:variable_name =覆盖变量(如果您未使用sqlpackage.exe进行部署,那么您使用的是八达通部署?)。

第二种方法比较困难,但非常直接,可以使用.net打包api读取和写入dacpac,还有一个名为postdeploy.sql的流(文件)(将其作为zip文件打开并很明显哪一个是post部署文件),你可以阅读它,改变你的特定值,然后再写回来。

对于dacpac看到的更多的人工编辑:

https://github.com/GoEddie/Dacpac-References

埃德

+0

嗨版, 感谢您的建议,我使用sqlpackage.exe如问题陈述。我将给出SQLCMD变量的路由,第二个选项是我最大的问题是如何打开dacpac并编辑post部署文件。手动编辑文件到.zip然后编辑postdeploy.sql很简单,但使用章鱼部署似乎会更困难。澄清: “v:variable_name =”如果我把它放在我的sqlpackage中,exe命令行它会改变部署的变量? 再次感谢! 亚当 –

+0

是的,这是正确的/ v:variable_name =值:) –

+0

谢谢埃德。这很好。 –

相关问题