如何使用安装程序撤消SQL更改

时间:2011-01-15 13:39:56

标签: sql sql-server database installer sql-update

我有安装程序在SQL Server 2005/2008中安装过程,脚本,视图等。

现在我想在安装程序中添加一个条件,比如安装时是否有任何错误,我想撤消在SQL服务器中完成的所有更改。

我试图存储我正在更改的过程,视图等,如果我收到任何错误,请在安装和恢复时将其恢复。但我不能按照我想要的方式去做。

如果他做了同样的事,有人可以指导我吗?

指定我正在使用WIX安装程序。

如果有人尝试过SMO,那将会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

处理此问题的最简单且最强大的方法是根本不使用安装程序。而是将所有SQL包装到事务块中。使用这意味着如果由于任何原因(作为SQL的一部分)出现任何故障,那么事务将正常回滚,并且所有数据库更改都将被还原,而不必在SQL语句上定义事务块。 / p>

假设MS SQL有关交易的更多信息可以在这里找到:

http://msdn.microsoft.com/en-us/library/ms188929.aspx

大多数其他主流SQL实现都遵循非常相似的模型,但显然可以参考他们的文档。

如果安装的某个其他组件失败,则需要触发安装的SQL组件的“回滚”。然后不幸的是你不能以这种方式使用交易。但是在这种情况下,您只需调用一个回滚脚本来删除您添加的任何SP /表等。也就是说,在.NET中你可以将SQL事务处理成代码(即C#),如果你可以使用它来包装所有东西。

答案 1 :(得分:0)

回滚SQL升级脚本可能很困难,特别是如果该脚本可能在任何时候失败。问题是内置的回滚机制无法处理,例如,大多数DDL语句。因此,您必须使用撤消更改的补偿脚本手动实现此类回滚。

安装开始时back-up数据库可能更简单,restore安装失败可能会更简单。