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 を防ぐ。ネストしたトランザクションのロジックを見直す。
同じデータベースの他の項目
- 2714There is already an object named in the database(同名のオブジェクトがすでに存在する)
- 601Could not continue scan with NOLOCK due to data movement(データ移動のため NOLOCK でのスキャンを続行できない)
- 50000RAISERROR で発生させたカスタムエラー
- 1101Could not allocate a new page because of insufficient disk space in filegroup(ファイルグループのディスク容量不足により新しいページを割り当てられない)
- 3729Cannot DROP because it is being referenced by object(オブジェクトから参照されているため DROP できない)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement(DDL 文でオブジェクトが変更されたためスナップショット分離トランザクションが失敗)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths(FOREIGN KEY 制約により循環または複数のカスケードパスが生じる可能性)