版本控制 DDL 更改

Version controlling DDL changes

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

我有以下要求

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

目前我想知道将更改脚本和同步创建脚本放入 git/svn 是否是实现此目的的最简单方法。但是两者不同步的可能性让我很不安。

在源代码控制中保留更改脚本很痛苦,因为要返回到特定时间点,您需要 运行 基础创建,然后所有更改脚本 + 您必须编写手动回滚脚本(如果你需要的话)

编写手动更改脚本也很痛苦,因为您必须实际编写脚本,而且现在是 2015 年所以不要那样做!

所以我真的建议使用 SSDT 或 redgate,redgate 很酷,但 SSDT 是免费的,还包括设计时检查和重构,所以如果你在 SSDT 中重命名 table 之类的操作,它会生成一个sp_rename 而不是删除第一个 table 并创建一个新的(这是 redgate 工具会做的)

无论您使用哪种工具,都有命令行版本的工具可以在您真正想要发布时进行比较/部署,因此只需让签入的代码显示您希望数据库在发布时所处的状态.

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

您唯一没有提及的是静态或参考数据,要处理此问题,请使用 redgate 数据比较工具,或者如果您不打算使用 ssdt,则可以使用 redgate 源代码控制 ssms 加载项这让你 link tables 到 csv 文件。

如果您打算使用 SSDT,那么请使用 post-部署脚本,并为您需要存储在源代码管理中的每个 table 创建一个合并语句。

SSDT 摇摇欲坠,确实是任何开发 T-Sql 代码的人的前进方向(即使他们还没有意识到!)

埃德