如何使用事务(开始事务,提交事务)?

8

我在一些场景中见过事务的使用,但实际上并不清楚应该在哪些情况下使用。如何以及何时应该使用事务(即begin transaction语句)?我已经阅读到Microsoft不建议在触发器和存储过程中使用事务语句(commit、rollback)。

2个回答

5

当插入或操作数据时,事务可以与存储过程或SQL脚本中的错误处理一起使用,以确保所有内容都是一致的。

例如,如果您有一个存储过程将记录插入到父表和子表中,您需要确保首先插入父记录;如果失败,您可以回滚更改,以避免产生孤立的子记录。

Erland Sommarskog在SQL Server中如何使用错误处理方面有一篇精彩的文章

最后,微软建议在存储过程中不要使用事务?我认为存储过程是使用事务的理想场所。


谢谢,也许我的陈述过于直接:有一个警告,即在存储过程或触发器中使用commit或rollback可能会导致错误:http://msdn.microsoft.com/en-us/library/ms187844(v=SQL.100).aspx - juur

2
如果我要从一个账户转账到另一个账户,我希望它是100%成功或100%失败。
UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn'
--what if the server caught fire here?
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn'

关于你所读的内容,除了在触发器中不需要使用BEGIN TRAN之外,其他都是胡说八道。
这是来自“嵌套存储过程包含TRY CATCH ROLLBACK模式”的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接