在SQL Server catch语句中处理回滚

4

在我的阅读中,我看到了两种在SQL Server存储过程的CATCH部分处理事务回滚的方法:

1: if @@trancount > 0 ROLLBACK
2: if XACT_STATE() <> 0 ROLLBACK TRAN

哪个更好,为什么?
1个回答

8
这篇MSDN文章是一个很好的参考。引用如下:

XACT_STATE和@@TRANCOUNT函数都可以用于检测当前请求是否有活动用户事务。@@TRANCOUNT不能用于确定该事务是否被分类为不可提交的事务。XACT_STATE不能用于确定是否存在嵌套事务。

假设您想在某些情况下可能提交事务,则XACT_STATE将有所帮助,因为它将识别是否可以提交或者不行,而@@TRANCOUNT无法告诉您。如果您只想执行回滚操作,则任何一个都可以胜任,因此取决于您实际需要什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接