SQL Server 2005:为什么要命名事务?

12

我一直在整理SQL Server中的嵌套事务问题,并且我已经掌握了这些关于嵌套事务行为的理解要点:

  • 当嵌套事务时,只有最外层的提交会实际提交。
  • "Commit Trans txn_name" 在嵌套情况下,将始终应用于最内部的事务,即使txn_name指向外部事务也是如此。
  • "ROLLBACK TRAN"(无名称),即使在内部事务中,也会回滚所有事务。
  • "ROLLBACK TRAN txn_name" - txn_name必须引用最外层的txn名称。如果不是,则会失败。

考虑到这些,命名事务有什么好处吗?您不能使用它来针对特定的事务进行提交或回滚。它只是用于注释代码吗?

谢谢,

Yoni


另一个我认为不值得回答的原因在这里:http://www.sqlskills.com/blogs/paul/code-to-show-rolled-back-transactions-after-a-crash/。 - Christian.K
3个回答

9

实际上,它只是程序员的备忘录。如果您正在处理具有多个内部事务的Tx,则为每个事务指定有意义的名称可以帮助您确保事务嵌套得当,并可能捕获逻辑错误。


2

当出现错误时,您可以使过程仅回滚其自身的工作,让调用者决定是放弃整个事务还是恢复并尝试另一条路径。请参见异常处理和嵌套事务,以获取允许此原子行为的过程模板。


2
真的吗?但文档说你不能回滚内部嵌套事务,只能回滚最外层事务。我不是在质疑你,因为我还没有尝试过,我只是好奇它实际上是如何工作的。 - Bill Karwin
1
你可以回滚到一个保存点。我认为这不同于命名事务,但我想这才是你真正想要的。 - Remus Rusanu
1
Remus - 对保存点的提醒很好。否则,(如果不使用保存点,我目前还没有使用),没有好处吗? - user144133
2
命名事务可以捕获应用程序错误,当事务嵌套不符合开发人员的预期时,因为如果组件尝试回滚错误的名称,就会生成错误。 - Remus Rusanu
好的,谢谢,这很有道理。嵌套事务!=保存点。 - Bill Karwin
顺便说一下,我看了你在回复中提供的文章。这个模式看起来很不错,我会在以后尝试一下。谢谢。 - user144133

0

但它不会回滚您的部分工作。嵌套事务仅增加@@TRANCOUNT。回滚嵌套事务将回滚整个事务。除非您在谈论保存点。 - Daniel Schilling

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