2016-09-26 67 views
0

我经常使用EF迁移来部署数据库,无论从头还是演化。然而,我目前正在研究另一个使用DACPAC的团队项目,直到今天,这个项目看起来一样好。今天,我添加了一个唯一键约束到一个缺乏它的表,并且你可能想象它会被炸毁,导致通过sqlpackage.exe进行的DACPAC部署失败。使用SqlPackage.exe回滚失败的DACPAC

我现在意识到的是失败不会回滚,所以现在我有一个处于部分转换状态的数据库,并且因为我有一个预部署脚本引用了预处理后的列,部署脚本第一次运行,现在状态是这样,我不能再次运行dacpac,因为它因此失败。

我错误地认为sqlpackage.exe会在事务中包装部署,并在失败时进行回滚。然后,在意识到自己的错误后,又错误地认为我错过了某处的国旗。

谁能告诉我如何安全地运行一个没有实质上破坏数据库...

回答

1

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