DBAtlas · データベース運用アトラス

3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION(COMMIT に対応する 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 で開く →

同じデータベースの他の項目