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

相关问题