首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用事务(begin transaction,commit transaction)?

如何使用事务(begin transaction,commit transaction)?
EN

Stack Overflow用户
提问于 2010-09-26 23:59:27
回答 2查看 16.4K关注 0票数 8

我在某些情况下看到过事务的使用,但从来没有真正理解在哪些情况下应该使用它们。如何以及何时使用事务(begin transaction语句)?我读到Microsoft不建议在触发器和存储过程中使用事务语句(commit、rollback)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-27 00:14:36

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

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

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

最后,Microsoft建议不要在存储过程中使用事务的地方在哪里?我认为存储过程将是使用它们的理想位置。

票数 5
EN

Stack Overflow用户

发布于 2010-09-27 00:18:44

如果我将moey从一个帐户转移到另一个帐户,我希望它是100%成功或100%失败:

代码语言:javascript
复制
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?“的示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3798589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档