我已经整理出在SQL Server中全嵌套事务的事情,我已经闪闪发光的嵌套反行为的理解这些掘金:
- 嵌套事务时,只有最外层的承诺实际上将提交。
- “提交跨txn_name”,嵌套时,总是应用到最里面的交易,即使txn_name是指外部事务。
- “ROLLBACK TRAN”(没有名字),即使在内部交易,将回退所有事务。
- “ROLLBACK TRAN txn_name” - txn_name必须参照最TXN名。 如果没有,它就会失败。
考虑到这些,有没有命名交易的任何好处? 你不能用它来针对特定tranasction,无论是提交或回滚。 难道仅仅是对代码注释的目的呢?
谢谢,
约尼
有效的,它只是一个程序员备忘录。 如果你正在处理一个的Tx有一些内部的交易,让每一个有意义的名字,可以帮助您确保该tranactions是正确的嵌套,可能赶上逻辑错误。
你可以有程序上的错误回滚只属于自己的工作,允许调用者据此决定是否放弃整个事务或恢复,并尝试另一条路径。 见异常处理和嵌套事务的程序模板,让这个原子行为。
我们的想法是回滚工作的一部分,就像一个嵌套事务。 如预期并不总是工作。 当它们与TRY ... CATCH块一起,按照规定使用使用旧式的错误处理和保存点的存储过程可能无法正常工作: 避免混合新旧风格的错误处理。
这里已经讨论@@ ERROR和/或TRY - CATCH