我想在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")
答案 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
中