回滚整个过程(所有语句)
如何以某种方式编写过程,以便只要ANY语句中出现错误,我就可以ROLLBACK所有INSERT,UPDATE和DELETE语句。回滚整个过程(所有语句)
请注意,我的程序可能并可能没有按顺序列出的陈述。换句话说,我有一个INSERT语句,然后是一些IF逻辑,然后是一个select语句,然后是另一个INSERT,然后是一个UPDATE,然后是逻辑,然后是DELETE语句等。
我只想ROLLBACK所有的INSERT,如果任何语句发生错误,则更新和删除语句。我发现这个代码http://msdn.microsoft.com/en-us/library/ms181299.aspx和http://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,如果没有评论,我会再试一次。 :-)