トランザクションの有効期間
適用対象: SQL Server
Transact-SQL ストアド プロシージャで開始されたトランザクションとマネージド コードで開始されたトランザクションには重要な違いがあります。共通言語ランタイム (CLR) コードでは、CLR 呼び出しの開始または終了時にトランザクションの状態を不均衡にすることはできません。 この違いにより、次の点に注意してください。
CLR フレーム内で開始されたトランザクションはコミットまたはロールバックする必要があります。そうしないと、フレームの終了時に SQL Server によってエラーが生成されます。
CLR コード内部から外部のトランザクションをコミットまたはロールバックすることはできません。
同じプロシージャ内で開始されていないトランザクションをコミットしようとすると、実行時エラーが発生します。
同じ手順で開始されていないトランザクションをロールバックしようとすると、トランザクションの応答が停止します (他の副作用のある操作が発生するのを防ぎます)。 トランザクションは、CLR コードがスコープ外になるまで再開されません。 この動作は、プロシージャ内部でエラーを検出したときに、トランザクション全体を終了することが望ましい場合に役立つことがあります。