【问题标题】:Deploy multiple dacpac files to a single database将多个 dacpac 文件部署到单个数据库
【发布时间】:2017-10-03 06:31:13
【问题描述】:

我想在我们的 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")

【问题讨论】:

  • 如果您先部署第一个,然后再部署第二个,该怎么办。是覆盖吗??或者它是否满足您的需求。然后我们可以考虑一些逻辑
  • 是的,它会移除第一个 dacpac 创建的对象,只保留第二个 dacpacc 中的对象。但我想保留两者。我可以每次都创建整个新数据库,因为它只是用于集成测试,并且每次都必须从新实例开始。
  • 那么为什么不创建两个单独的对象并将其部署在单个数据库中。用两个 dacpac 运行一个 foreach 并部署它,

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2021-09-30
    • 2018-08-28
    • 2016-10-05
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2017-02-22
    • 2012-03-17
    相关资源
    最近更新 更多