ssdt:使用dacpac进行版本控制参考数据

时间:2016-09-05 14:00:28

标签: sql sql-server-data-tools dacpac

Dacpac是版本化架构的好方法,我们必须使用前/后部署来修改参考数据。

有什么更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

但它目前是one of the most requested features in SSDT所以也许有可能在将来某个时候实施。

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

  • 如果表中的数据变化非常频繁,因为每个表一个文件的方法允许分支/合并来自多个开发人员的并发更改
  • 如果表中的数据包含特定于环境的值,例如应用程序设置,则此方法允许您使用SQLCMD变量和feed the values in from a deployment tool

离线方法可能存在问题:

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

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

您可以在ReadyRoll documentation

中详细了解离线和在线方法的不同之处
相关问题