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

use*_*133 11 sql-server transactions nested-transactions

我一直在整理SQL服务器中的整个嵌套事务,我已经了解了嵌套trans'行为的理解:

  • 嵌套事务时,只有最外面的提交才会实际提​​交.
  • 嵌套时,"Commit Trans txn_name"将始终应用于最内层事务,即使txn_name引用外部事务也是如此.
  • 即使在内部事务中,"ROLLBACK TRAN"(无名称)也将回滚所有事务.
  • "ROLLBACK TRAN txn_name" - txn_name必须引用最外面的txn名称.如果没有,它将失败.

鉴于这些,命名交易有什么好处吗?您无法使用它来定位特定的tranasction,无论是提交还是回滚.它仅用于代码评论目的吗?

谢谢,

约尼

Chr*_*s J 8

实际上它只是程序员的备忘录.如果您正在处理具有多个内部事务的Tx,则给出每个有意义的名称可以帮助您确保这些代码被适当地嵌套并且可能捕获逻辑错误.


Rem*_*anu 2

您可以让过程在出现错误时仅回滚自己的工作,从而允许调用者决定是放弃整个事务还是恢复并尝试备用路径。有关允许此原子行为的过程模板,请参阅异常处理和嵌套事务。

  • 真的吗?但文档说你不能回滚内部嵌套事务,只能回滚最外层事务。我不是在争论你,因为我还没有尝试过,我只是好奇它实际上是如何工作的。 (2认同)
  • 当事务嵌套不是开发人员期望的嵌套时,命名事务可以捕获应用程序错误,因为如果组件尝试回滚错误的名称,则会生成错误。 (2认同)