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

时间:2010-09-26 15:59:27

标签: sql-server sql-server-2005 sql-server-2008 stored-procedures transactions

我在某些情况下看到了交易使用情况,但从未真正理解应该在哪些情况下使用它们。应该如何以及何时使用交易(开始交易声明)?我已经读过微软不建议在触发器和存储过程中使用事务语句(commit,rollback)。

2 个答案:

答案 0 :(得分:5)

在插入或操作数据时,事务可以与存储过程或SQL脚本中的错误处理结合使用,以确保一切都是一致的。

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

Erland Sommarskog有一个关于如何在SQL Server中使用错误处理的great article

最后,Microsoft建议在存储过程中使用事务?我认为存储过程是使用它们的理想场所。

答案 1 :(得分:2)

如果我将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?

的示例