如何在 DACPAC 部署中仅部署一组选定的存储过程?

Posted

技术标签:

【中文标题】如何在 DACPAC 部署中仅部署一组选定的存储过程?【英文标题】:How can I deploy only a select set of stored procedures in a DACPAC deployment? 【发布时间】:2020-08-08 08:48:16 【问题描述】:

我有一个包含数据库项目的 Visual Studio 项目。我创建了一个执行软件更新的可执行文件,该更新的一部分是更新数据库。一些存储过程依赖于现有的链接服务器,该链接服务器也被创建为可执行文件的一部分。问题是此功能是可选的,并且链接服务器无法连接到某些客户端计算机上。但 DACPAC 失败,因为链接服务器无法连接。我正在使用 sqlpackage.exe 来部署 .dacpac 文件。

有什么方法可以部署全部或部分存储过程?或者也许我可以设置一个标志来忽略链接服务器错误?或者也许有另一种使用 sqlpackage/dacpac 的方法?

我想到的一个选择是将包含链接服务器的存储过程转换为动态 SQL。

在 Visual Studio 中拥有数据库,因此源代码控制很重要。

【问题讨论】:

【参考方案1】:

是的!

这很容易做到。您可以在 Visual Studio 中查看您的数据库项目。我建议删除有问题的存储过程并将它们合并回主控。然后我会取出一个特性分支并再次指向你有存储过程的数据库,并使用模式比较来取回它们(即使是那些不能正常工作的数据库,这样你就不会丢失它们) .将提交推送到功能分支存储库。然后,既然您在源代码控制中拥有有问题的存储过程 + 在 master 中的可交付版本 - 您可以继续通过数据库项目通过 Visual Studio“发布”到您想要选定对象的 DB 中。

如果您还没有签入任何要掌握的内容 - 您可以进行架构比较并选择所有对象,除了那些有问题的对象并更新您的数据库项目。并将其合并为master。如果这没有意义,请对此答案发表评论,我很乐意提供更多详细信息。

【讨论】:

【参考方案2】:

好吧,我遇到了这个。仍在努力实现这一点以解决我的问题。也可能对您的事业有所帮助。

从以下位置下载过滤器: https://agilesqlclub.codeplex.com/releases/view/610727 把 dll 进入与 sqlpackage.exe 相同的文件夹并添加这些命令行 部署参数:

/p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

这不会部署、删除或更改 BLAH 架构中的任何内容。

更多详情 https://the.agilesql.club/2015/01/howto-filter-dacpac-deployments/

【讨论】:

欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么存在,然后引用最多您链接到的页面的相关部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.

以上是关于如何在 DACPAC 部署中仅部署一组选定的存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Azure DevOps DACPAC 部署中获取漂移报告?

部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?

如何将 DACPAC 部署到事务复制数据库

在 DACPAC 部署中使用 SQL 变量来区分权限

azure 中的 Dacpac 部署将值称为无效的列名

由于缺少对象,DACPAC 无法部署