Ssdt:使用dacpac对引用数据进行版本控制



Dacpac是对模式进行版本控制的一个很好的解决方案,我们必须使用前后部署来修改引用数据。

有更好的解决方案吗?

我看到的最好的方法是使用合并语句,每个文件一个表,并使用:r imports将它们导入到部署后脚本中。

您可以获得版本历史记录和易于比较的数据,并且使用sp_generate_merge使其变得非常简单。

爱德

如果您正在寻找在SSDT中处理不涉及使用部署前/部署后脚本的引用的解决方案,不幸的是,目前还没有。

但它目前是SSDT中最受欢迎的功能之一,所以也许将来有机会实现它。

我是Ed提到的sp_generate_merge OSS实用程序的维护者,在Redgate,我们在以下情况下向我们的客户推荐以离线方式处理参考数据的方法:

  • 如果表中的数据变化非常频繁,因为每个表一个文件的方法允许分支/合并来自多个开发人员的并发更改
  • 如果表中的数据包含特定于环境的值,如应用程序设置,因为此方法允许您使用SQLCMD变量并从部署工具输入值

脱机方法可能有问题的地方:

  • MERGE语句的不确定性:在针对目标环境实际运行部署之前,可能很难知道将应用哪些更改(如果有的话)。最坏的情况是,您可能会遇到MERGE
  • 中记录的问题之一。
  • 工作流不一定是编辑数据的最自然的方式,因为它需要运行实用程序并将输出复制粘贴回原始文件。直接编辑文件是另一种选择,但不是最友好的体验,特别是在大量参考数据
  • 时。
  • 考虑到SSDT仍然负责应用模式更改,协调对参考表中的模式和数据的更改可能是一个挑战。例如,如果您想添加一个没有默认值的新的NOT NULL列。

另一个解决方案涉及遵循在线方法,该方法由我们的ssdt替代方案ReadyRoll数据库项目支持。它允许数据直接在数据库中编辑,随后导入到项目中,同步脚本(即包含INSERT, UPDATE, DELETE语句,而不是MERGE)由其数据比较工具生成,以及任何模式更改。

您可以在ReadyRoll文档中阅读更多关于离线和在线方法的不同之处。

最新更新