11

我一直在整理 SQL Server 中的整个嵌套事务,并且发现了这些对嵌套 trans 行为的理解的要点:

  • 嵌套事务时,只有最外层的提交才会真正提交。
  • “提交 Trans txn_name”,当嵌套时,将始终适用于最里面的事务,即使 txn_name 指的是外部事务。
  • "ROLLBACK TRAN" (no name) ,即使在内部事务中,也会回滚所有事务。
  • "ROLLBACK TRAN txn_name" - txn_name 必须引用最外层的 txn 名称。如果没有,它将失败。

鉴于这些,命名交易有什么好处吗?您不能使用它来定位特定的事务,无论是提交还是回滚。它仅用于代码注释目的吗?

谢谢,

约尼

4

3 回答 3

8

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

于 2009-08-14T23:43:06.987 回答
2

You can have procedures rollback only their own work on error, allowing the caller to decide wether to abandon the entire transaction or recover and try an alternate path. See Exception handling and nested transactions for a procedure template that allows this atomic behavior.

于 2009-08-13T17:25:09.757 回答
0

这个想法是回滚您的部分工作,例如嵌套事务。并不总是按预期工作。使用旧式错误处理和保存点的存储过程在与 TRY ... CATCH 块一起使用时可能无法按预期工作:避免混合新旧式错误处理。

已经在这里讨论过@@ERROR 和/或 TRY - CATCH

于 2009-08-13T18:01:30.980 回答