我们可以使用TFS和SSDT创建SQLServer部署脚本,但有没有办法创建回滚脚本,以便我们可以回滚部署? 感谢的
答案 0 :(得分:7)
由于SSDT(和类似产品)都通过将项目中的模式与实时数据库进行比较以使数据库与模型同步来工作,因此不是创建回滚脚本的直接方法。还有关于通过部署前或部署后脚本更改/添加/删除数据的注意事项。
话虽如此,有一些选择。
您需要相应地编码以回滚数据更改。由于每个场景都不同,这可能会有点棘手。您需要确保编写的脚本可以撤消发布中的任何更改。如果您插入了一行,则需要一个回滚脚本来删除它。如果您更新了大量数据,则需要备份该数据或以其他方式将其恢复。
答案 1 :(得分:1)
在对数据库项目进行任何更改之前,我会拍摄一张快照(一个dacpac),我可以将修改后的数据库项目与之比较,以生成一个发布脚本。虽然交换源和目标以进行反向模式比较容易,但我发现它不会让我从反向比较中生成更新脚本(这将是回滚脚本) ,大概是因为目标是一个数据库项目。
要解决该问题并生成回滚脚本,请执行以下操作:
将修改后的数据库项目部署到我的(localdb)开发数据库;
从更改前的源代码管理中检出数据库项目的先前版本;
运行从先前版本的数据库项目到(localdb)开发数据库的模式比较;
使用架构比较生成更新脚本。此更新脚本将是一个回滚脚本。
虽然能够更直接地生成回滚脚本会很好,但上面的四步过程只需不到五分钟。