SSDT可以做与Liquibase / Flyway相当的事情,但是它采用了不同的方法。使用SSDT,您可以拥有开发环境,从而可以进行定义,查找引用和智能感知,还可以将项目编译为dacpac,然后将该dacpac部署到数据库中。
进行部署的SSDT方法(和redgate sql比较方法)是声明您想要的内容,因此,如果您想更改如下表:
create table a(id int)
到如下表:
create table a(id int, another_column varchar(12))
使用SSDT,您只需将表定义更改为第二个,然后让SSDT担心如何升级它(它可以更改表,添加列还是更改列顺序,因此您需要重建表等)。
使用Liquibase(DbUp,ReadyRoll,手动方法等),在这种情况下,您必须自己编写更改表,并确保以正确的顺序运行脚本,请考虑以下情形:
- 发布1-在表格上创建列Hello
- 版本2-将列hello重命名为joe_blogs
- 发布3-重命名列joe_blogs为hello
- 发布4-创建列joe_blogs
如果错过了任何发行版,则下一个发行版都无法继续。
升级脚本(Liquibase,DbUp等)的好处:
比较/合并(SSDT,Redgate SQL Compare)的好处:
- 不必编写升级脚本
- 只需比较并合并该版本即可轻松获取任何特定版本
升级脚本的缺点:
- 必须按顺序运行
- 依靠人类没有犯错误
- 可能会很慢,特别是如果您有很多更改
- 除非您的团队在不同环境(开发,测试,登台,产品等)中纪律严明的数据库经常不同步,否则任何测试都将无效
- 降级发行版意味着编写与您已经编写的所有脚本相反的版本
使用比较/合并的缺点:
- 工具不是100%受信任的,也许是不公平的
- SSDT需要一个有效的项目,许多数据库的代码实际上并未编译或运行(请考虑删除表,但不包括过程等),我在大约8/10继承的数据库中看到了这一点:)
- 许多DBA /开发人员都不愿放弃在SSMS /记事本中进行开发
我个人确实认为SSDT是一个专业的开发环境,这意味着我可以专注于编写有用的代码和测试,而不是编写升级脚本,而升级脚本本身只是达到目的的一种手段。
您征求意见,然后就可以了:)
编