我在某些情况下看到过事务的使用,但从来没有真正理解在哪些情况下应该使用它们。如何以及何时使用事务(begin transaction语句)?我读到Microsoft不建议在触发器和存储过程中使用事务语句(commit、rollback)。
发布于 2010-09-27 00:14:36
在插入或操作数据时,事务可以与存储过程或SQL脚本中的错误处理结合使用,以确保一切都是一致的。
例如,如果有一个将记录插入父表和子表的存储过程,则需要确保先插入父记录;如果插入失败,则可以回滚更改,这样就不会有孤立的子记录。
Erland Sommarskog有一个关于如何在SQL Server中使用错误处理的great article。
最后,Microsoft建议不要在存储过程中使用事务的地方在哪里?我认为存储过程将是使用它们的理想位置。
发布于 2010-09-27 00:18:44
如果我将moey从一个帐户转移到另一个帐户,我希望它是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之外,完全是垃圾。
来自"Nested stored procedures containing TRY CATCH ROLLBACK pattern?“的示例
https://stackoverflow.com/questions/3798589
复制相似问题