将多个dacpac文件部署到单个数据库

时间:2017-05-04 22:23:57

标签: sql-server powershell continuous-integration continuous-deployment dacpac

我想在CI服务器上自动执行数据库部署。我写了一个powershell脚本来将dacpac文件部署到sql server上的数据库。但现在我处于一个奇怪的位置,我有两个独立的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")

1 个答案:

答案 0 :(得分:1)

默认情况下,发布dacpac不会丢弃额外的对象。有一个设置,您必须明确选择启用该行为(它被称为“不在源代码中的drop对象”,默认情况下为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