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