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} 

「#{}」は octopus デプロイ サーバーのパラメーターです。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 を使用していない場合、何を使用していますか? Octopus deploy?)。

2 番目の方法は難しいですが、非常に簡単です。dacpac は、.net パッケージ API を使用して読み書きできます。postdeploy.sql というストリーム (ファイル) があります (zip ファイルとして開くと、どちらが1 つはデプロイ後のファイルです)、それを読み取り、特定の値を変更してから、再度書き戻すことができます。

dacpac の手動編集の詳細については、以下を参照してください。

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

エド

于 2016-02-02T07:37:02.977 に答える