回滚整个过程(所有语句)

问题描述:

如何以某种方式编写过程,以便只要ANY语句中出现错误,我就可以ROLLBACK所有INSERT,UPDATE和DELETE语句。回滚整个过程(所有语句)

请注意,我的程序可能并可能没有按顺序列出的陈述。换句话说,我有一个INSERT语句,然后是一些IF逻辑,然后是一个select语句,然后是另一个INSERT,然后是一个UPDATE,然后是逻辑,然后是DELETE语句等。

我只想ROLLBACK所有的INSERT,如果任何语句发生错误,则更新和删除语句。我发现这个代码http://msdn.microsoft.com/en-us/library/ms181299.aspxhttp://en.allexperts.com/q/MS-SQL-Server-1801/Rollback-SP.htm

但他们不回答我的问题。

如果交易正在运行与XACT_ABORT选项这将自动发生。

set xact_abort on 
begin tran 

/*Your code*/ 


commit 

这里有一个interesting question讨论使用vs结构错误处理。

查看TRANSACTION的工作方式(您给的链接也使用它,但由于DTS交互,事务似乎被窃听)。基本上,您可以回滚自从您发起交易开始以来所做的所有事情。

马丁史密斯的answer with xact_abort is desribed in more detail here

您所描述的内容称为“数据库事务处理”。它将数据写入数据库的方式创建一个“全部或全部”的构造。

它会创建一个逻辑框架,将所有表格一起更新,但如果一个表格无法更新,那么整个事务将回滚到以前的状态。

大多数数据库都是这样做的。伪代码如下。

 
Begin transaction 
    Update Table One 
    Update table Two 
    [Update lots of tables] 
    if all updates successfull 
     commit (All changes to all tables) 
    else 
     rollback (All changes) 
End transaction 

请注意,术语“事务”,“提交”和“回滚”通常也是大多数数据库使用的技术术语。

链接可能比我更好地解释它。 http://www.subbu.org/articles/nuts-and-bolts-of-transaction-processing

查看你的数据库的文档,你应该找到所有这些的参考。

HTH,如果没有评论,我会再试一次。 :-)