控制DDL的版本更改

时间:2015-04-27 14:30:04

标签: sql version-control

我正在尝试找出SQL版本更改的最佳方法。 我知道有像Redgate和Microsoft的SSDT这样的产品,但同样我想知道更多的手动流程是否可以使部署自动化变得更容易。

我有以下要求

  • 必须能够在表格结构上生成差异
  • 必须能够自动更改数据库
  • 必须能够责怪更改并查看提交评论

如果我使用的是Redgate或SSDT,我是否需要从数据库的当前状态生成部署脚本?

目前我想知道将更改脚本和同步创建脚本放入git / svn是否是最简单的方法。但两人失去同步的可能性让我感到不安。

1 个答案:

答案 0 :(得分:2)

在源代码管理中保留更改脚本是一件痛苦的事情,因为要回到特定时间点,您需要运行基本创建,然后运行所有更改脚本+您必须编写手动回滚脚本(如果需要)< / p>

编写手动更改脚本也很麻烦,因为你必须实际编写脚本,这是2015年,所以不要这样做!

所以我真的建议使用SSDT或redgate,redgate很酷但是SSDT是免费的,还包括设计时检查和重构,所以如果你做一些事情,比如在SSDT中重命名一个表,它会产生一个sp_rename而不是丢弃第一个表并创建一个新的(这是redgate工具会做的)

无论您使用哪种方法,都有命令行版本的工具在您实际要发布时进行比较/部署,因此只需让签入的代码显示您希望数据库在发布时所处的状态。 / p>

根据您的要求,redgate和ssdt都将执行所有这三项工作(除了数字3,通过在源代码管理中使用create语句表示数据库来处理)

你唯一没有提到的是静态或参考数据,要处理它要么使用redgate数据比较工具,要么你可以使用redgate源控件ssms加载项如果你不打算使用ssdt您将表链接到csv文件。

如果您要使用SSDT,请使用部署后脚本,并为需要存储在源代码管理中的每个表提供合并语句。

对于任何开发T-Sql代码的人来说,SSDT真的是前进的方向(即使他们还没有实现它!)