有时我看到以下代码片段。什么时候需要if @@trancount > 0begin try?他们都?还是一种安全的方法(最佳实践),始终进行检查以防在检查之前回滚?

begin tran
begin try
  ... just several lines of sql ...
  if @@trancount > 0 commit tran
end try
begin catch
  if @@trancount > 0 rollback tran
end catch

最佳答案

我可以想到一些在处理@@trancount时要考虑的场景:

  • 当前事务是从另一个存储过程调用的,该存储过程具有
    自己的交易
  • 当前的事务是由某些.NET代码调用的。
    交易
  • 当前事务是唯一的事务

  • 我相信Remus Rusanu的Exception handling and nested transactions可以处理所有这些可能性。

    关于sql-server - 何时需要在try catch块中检查@@ trancount> 0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13983467/

    10-09 00:13