1

我正在通过构建一个 sql 项目在 TeamCity 中创建一个 DacPac。生成的 DacPac 有一个部署后脚本,我想在部署时或在使用版本号创建它之前对其进行更新。是否可以在 TeamCity 中或在部署 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”替换为版本号,但这种方法并不理想。如果另一个开发人员使用不符合文件内容替换器构建功能中使用的正则表达式的不同参数签入文件,这可能会在未来导致错误。

4

1 回答 1

4

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

第二种方法更难但非常简单,可以使用 .net 打包 api 读取和写入 dacpac,有一个名为 postdeploy.sql 的流(文件)(将其作为 zip 文件打开,很明显哪个一个是部署后文件),您可以读取它,更改您的特定值,然后再次将其写回。

有关 dacpac 的更多手动编辑,请参阅:

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

埃德

于 2016-02-02T07:37:02.977 回答