我在一些场景中见过事务的使用,但实际上并不清楚应该在哪些情况下使用。如何以及何时应该使用事务(即begin transaction语句)?我已经阅读到Microsoft不建议在触发器和存储过程中使用事务语句(commit、rollback)。
我在一些场景中见过事务的使用,但实际上并不清楚应该在哪些情况下使用。如何以及何时应该使用事务(即begin transaction语句)?我已经阅读到Microsoft不建议在触发器和存储过程中使用事务语句(commit、rollback)。
当插入或操作数据时,事务可以与存储过程或SQL脚本中的错误处理一起使用,以确保所有内容都是一致的。
例如,如果您有一个存储过程将记录插入到父表和子表中,您需要确保首先插入父记录;如果失败,您可以回滚更改,以避免产生孤立的子记录。
Erland Sommarskog在SQL Server中如何使用错误处理方面有一篇精彩的文章。
最后,微软建议在存储过程中不要使用事务?我认为存储过程是使用事务的理想场所。
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'