在我的阅读中,我看到了两种在SQL Server存储过程的CATCH部分处理事务回滚的方法: 1: if @@trancount > 0 ROLLBACK 2: if XACT_STATE() <> 0 ROLLBACK TRAN 哪个更好,为什么?
这篇MSDN文章是一个很好的参考。引用如下: XACT_STATE和@@TRANCOUNT函数都可以用于检测当前请求是否有活动用户事务。@@TRANCOUNT不能用于确定该事务是否被分类为不可提交的事务。XACT_STATE不能用于确定是否存在嵌套事务。 假设您想在某些情况下可能提交事务,则XACT_STATE将有所帮助,因为它将识别是否可以提交或者不行,而@@TRANCOUNT无法告诉您。如果您只想执行回滚操作,则任何一个都可以胜任,因此取决于您实际需要什么。