Sql server 处理SQL Server catch语句中的回滚

Sql server 处理SQL Server catch语句中的回滚,sql-server,stored-procedures,transactions,error-handling,Sql Server,Stored Procedures,Transactions,Error Handling,在我的阅读中,我在SQL Server存储过程的CATCH部分看到了两种处理事务回滚的方法: 1: if @@trancount > 0 ROLLBACK 2: if XACT_STATE() <> 0 ROLLBACK TRAN 1:if@@tracount>0回滚 2:if XACT_STATE()0回滚传输 哪个更好?为什么?这是一个很好的参考。引述: XACT_状态和@TRANCOUNT 函数可用于检测 当前请求是否具有 活动用户事务@@TRANCOUNT 无法用于

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

1: if @@trancount > 0 ROLLBACK
2: if XACT_STATE() <> 0 ROLLBACK TRAN
1:if@@tracount>0回滚
2:if XACT_STATE()0回滚传输
哪个更好?为什么?

这是一个很好的参考。引述:

XACT_状态和@TRANCOUNT 函数可用于检测 当前请求是否具有 活动用户事务@@TRANCOUNT 无法用于确定 该交易已被分类 作为不可提交的事务。 XACT_状态不能用于确定 是否存在嵌套事务

假设您想在某些情况下潜在地提交事务,那么XACT_状态将在这里帮助您,因为这将确定是否可以提交,而@TRANCOUNT无法告诉您这一点。如果你只想做一个回滚,两个都可以做,所以这取决于你实际需要什么