DBAtlas · 数据库运维图谱

3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION(COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION)

SQL Server

含义

执行了 COMMIT TRANSACTION,但没有对应的已打开的 BEGIN TRANSACTION。由于事务计数(@@TRANCOUNT)为零,找不到可提交的事务。

原因

BEGIN/COMMIT/ROLLBACK 使用不平衡、事务已在出错后回滚、嵌套事务计数管理不当,或在 CATCH 块中 ROLLBACK 之后再次调用 COMMIT。

解决方法

使 BEGIN 与 COMMIT 语句的数量平衡。提交前检查 @@TRANCOUNT(IF @@TRANCOUNT > 0 COMMIT)。在 TRY...CATCH 中,出错时根据 XACT_STATE()/@@TRANCOUNT 执行 ROLLBACK,并避免不必要的 COMMIT。审查嵌套事务逻辑。

在 DBAtlas 中打开 →

同一数据库的其他条目