我经常使用 EF 迁移来部署数据库,无论是从头开始还是为了进化。然而,我目前正在从事另一个使用 DACPAC 的团队项目,直到今天,这似乎也一样好。今天,我向缺少它的表添加了一个唯一键约束,正如您可能想象的那样,它爆炸了,导致通过 sqlpackage.exe 的 DACPAC 部署失败。

我现在意识到故障绝不会回滚,所以现在我有一个处于部分转换状态的数据库,并且因为我有一个预部署脚本指的是在预部署脚本运行后删除的列第一次,现在的状态使我无法再次运行 dacpac,因为它因此而失败。

我错误地认为 sqlpackage.exe 会将部署包装在事务中并在失败时回滚它。然后在意识到我的错误时,再次错误地假设我错过了某个地方的标志。

谁能告诉我如何在不破坏数据库的情况下安全地运行...

最佳答案

您可以使用/p:IncludeTransactionalScripts=true 让 SqlPackage.exe 作为单个事务执行主架构更改操作。但请注意,部署前和部署后脚本不包含在该事务逻辑中。建议的做法是以可以安全地重新执行(即作为幂等 T-SQL)的方式编写部署前和部署后脚本。

关于sql - 使用 SqlPackage.exe 回滚失败的 DACPAC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39707351/

10-11 06:34