我正在尝试找出SQL版本更改的最佳方法。 我知道有像Redgate和Microsoft的SSDT这样的产品,但同样我想知道更多的手动流程是否可以使部署自动化变得更容易。
我有以下要求
如果我使用的是Redgate或SSDT,我是否需要从数据库的当前状态生成部署脚本?
目前我想知道将更改脚本和同步创建脚本放入git / svn是否是最简单的方法。但两人失去同步的可能性让我感到不安。
答案 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真的是前进的方向(即使他们还没有实现它!)版