0

私は、CIサーバー上でデータベースのデプロイメントを自動化したいと思っています。私は、SQL Serverのデータベースにdacpacファイルを展開するためのpowershellスクリプトを書いていました。しかし、今私は2つの別々のdacpacファイルがあり、それらを単一のデータベースに展開したいという奇妙な立場にいる(私たちのソフトウェア設計のために単一のdacpacを使用することはできない)。 1つずつ展開すると、最初のdacpacから作成されたオブジェクトが削除されます。だから、ここのどんな助けも高く評価されます。複数のdacpacファイルを1つのデータベースにデプロイ

2つのdacpacファイルを組み合わせてコマンドやスクリプトを使用して展開する方法が他にもある場合は、ご提案にお答えください。

以下のpowershellスクリプトを使用して、単一のdacpacをデータベースに展開しています。

$sqlPackagePath = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll"; 
$sqlServer = "localhost"; 
$dacpacPath = "mydatabase.dacpac" 
$database = "TestDatabase" 

add-type -path $sqlPackagePath 
$dacService = new-object Microsoft.SqlServer.Dac.DacServices "server=$sqlServer" 
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpacPath) 
$dacService.deploy($dp, $database, "True") 
+0

最初のものを展開してから2番目のものを展開する場合はどうなりますか?それは上書きされますか?それともあなたの必要を満たしているか。 –

+0

の論理を考えると、最初のdacpacによって作成されたオブジェクトは削除され、2番目のdacpapcのオブジェクトのみが保持されます。しかし、私は両方を保ちたい。私は毎回新しいデータベース全体を作成するのは大丈夫です。これは、統合テストに使用されているたびに毎回新しいインスタンスから始めなければならないからです。 – user1856918

+0

それから、2つの別々のオブジェクトを作成して1つのdbにデプロイするのはなぜですか? 2つのdacpacでforeachを実行し、 –

答えて

1

デフォルトでは、dacpacを公開しても余分なオブジェクトは削除されません。その動作を有効にするために明示的に選択する必要のある設定があります(「ソースにないオブジェクトをドロップする」と呼ばれ、デフォルトではfalseです)。

ただし、古い(SQL Server 2012)バージョンのMicrosoft.SqlServer.Dacを使用してこの操作を実行しているため、おそらくそのバージョンの動作が新しいバージョンと異なります。

データ層アプリケーションフレームワーク(Microsoft.SqlServer.Dac)の最新バージョンは、ここから入手可能です:https://www.microsoft.com/en-us/download/details.aspx?id=55088

インストール後Microsoft.SqlServer.Dacの新バージョンは、Microsoft SQL Serverの\ 140になります\ DAC \ bin

関連する問題