0

我想在我們的CI服務器上自動部署數據庫。我寫了一個powershell腳本來將dacpac文件部署到sql server上的數據庫。但是現在我處於一個奇怪的位置,我有兩個獨立的dacpac文件,並且希望將它們部署到單個數據庫(由於我們的軟件設計,我無法使用單個dacpac)。如果我逐一部署它們,則會刪除從第一個dacpac創建的對象。所以這裏的任何幫助都非常感謝。將多個dacpac文件部署到單個數據庫

如果還有其他方法可以合併兩個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

如果您正在部署第一個,然後是第二個,該怎麼辦。它是否覆蓋?還是滿足您的需求?那麼我們可以考慮一些邏輯 –

+0

是的,它會刪除第一個dacpac創建的對象,並僅保留第二個dacpapc中的對象。但我想保留兩者。我可以每次創建整個新數據庫,因爲它僅用於集成測試,並且必須每次都從新實例開始。 – user1856918

+0

那麼爲什麼不創建兩個單獨的對象,並將其部署在一個單一的數據庫。用兩個dacpac運行foreach並部署它, –

回答

1

默認情況下,發佈dacpac不會刪除額外的對象。有一個設置必須明確選擇以啓用該行爲(它被稱爲「將對象放在不在源中」,默認爲false)。

但是,您正在使用Microsoft.SqlServer.Dac的舊版(SQL Server 2012)來執行此操作,因此該版本的行爲可能與新版本的行爲不同。

數據層應用程序框架(Microsoft.SqlServer.Dac)的最新版本可以在這裏找到:https://www.microsoft.com/en-us/download/details.aspx?id=55088

安裝後Microsoft.SqlServer.Dac的新版本將在Microsoft SQL Server \ 140 \ DAC \ bin

相關問題