sql-server – 如何从一个存储过程启动3个存储过程时回滚
|
函数XACT_STATE可用于确定事务是处于活动状态,不可控制还是不存在.建议(至少某些人)在CATCH块中检查此功能以确定结果是否为-1(即不可拒绝),而不是测试@@ TRANCOUNT> 0.但是在XACT_ABORT开启的情况下,这应该是唯一可能存在的状态,因此似乎测试@@ TRANCOUNT> 0和XACT_STATE()<> 0是等价的.另一方面,当XACT_ABORT为OFF并且存在活动事务时,则CATCH块中可能具有1或-1的状态,这允许发出COMMIT而不是ROLLBACK(尽管如此,如果事务是可提交的,那么当有人想要COMMIT时,我们就不会想到这种情况.有关在XACT_ABORT ON的CATCH块中使用XACT_STATE()的更多信息和研究可以在我对以下DBA.SE问题的答案中找到:In what cases a transaction can be committed from inside the CATCH block when XACT_ABORT is set to ON?.请注意XACT_STATE()存在一个小错误导致它错误地返回1在某些情况下:XACT_STATE() returns 1 when used in SELECT with some system variables but without FROM clause 关于原始代码的说明: >您可以删除提供给交易的名称,因为它没有任何帮助.>每个EXEC调用都不需要BEGIN和END (编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

