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

Deploy multiple dacpac files to a single database

我想在我们的 CI 服务器上自动部署我的数据库。我写了一个 powershell 脚本来将 dacpac 文件部署到 sql 服务器上的数据库。但是现在我处于一个奇怪的位置,我有两个单独的 dacpac 文件并想将它们部署到一个数据库(由于我们的软件设计,我不能使用单个 dacpac)。如果我一个一个地部署它们,它会删除从第一个 dacpac 创建的对象。所以非常感谢这里的任何帮助。

如果有其他方法可以将两个 dacpac 文件合并并使用任何命令或脚本部署它们,请回复您的建议。

我正在使用下面的 powershell 脚本将单个 dacpac 部署到数据库。

$sqlPackagePath = "C:\Program Files (x86)\Microsoft SQL Server0\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")

默认情况下,发布 dacpac 不会丢弃额外的对象。您必须明确选择一个设置才能启用该行为(称为 "drop objects not in source",默认情况下为 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 Server0\DAC\bin