Share via


ストアド プロシージャの入れ子

ストアド プロシージャは、別のストアド プロシージャを呼び出す場合、または CLR ルーチン、型、集計を参照してマネージ コードを実行する場合に入れ子になります。ストアド プロシージャとマネージ コード参照は、32 レベルまで入れ子にすることができます。入れ子のレベルは、呼び出されたストアド プロシージャまたはマネージ コード参照の実行が開始されると 1 つ増加し、呼び出されたストアド プロシージャまたはマネージ コード参照の実行が終了されると 1 つ減少します。入れ子の最高 32 レベルを越える呼び出しを行うと、一連の呼び出しが失敗します。実行中のストアド プロシージャの現在の入れ子のレベルは、@@NESTLEVEL 関数に格納されます。

ms190607.note(ja-jp,SQL.90).gifメモ :
Transact-SQL ストアド プロシージャからマネージ コードへの参照は、32 レベルの入れ子の制限の 1 レベルとしてカウントされます。マネージ コード内で呼び出されるメソッドについては、この制限としてカウントされません。

ストアド プロシージャで、CLR ルーチン、型、または集計を参照してマネージ コードが実行される場合、この参照は入れ子の 1 レベルとしてカウントされます。マネージ コード内で呼び出されるメソッドについては、この制限としてカウントされません。現在の入れ子のレベルは、@@NESTLEVEL 関数によって返されます。CLR ストアド プロシージャで、Microsoft SQL Server マネージ プロバイダを利用してデータ アクセス操作が実行される場合、マネージ コードから SQL への移行時に入れ子のレベルが 1 つ追加され、このレベルは @@NESTLEVEL 関数に反映されます。

入れ子になったストアド プロシージャ内でエラーが発生しても、呼び出し元のストアド プロシージャに対して必ずしも致命的な影響があるとは限りません。ストアド プロシージャ内でストアド プロシージャを呼び出す場合、Transact-SQL ステートメントの RETURN を使用してリターン コードを返し、呼び出し元のプロシージャでそのリターン コードを確認します。このようにすると、エラーが発生したときのストアド プロシージャの動作を指定できます。リターン コードの使用に関する詳細については、「リターン コードを使用したデータの返却」を参照してください。

ストアド プロシージャでは、自分自身の呼び出しを入れ子にする "再帰" という技法も使用できます。

入れ子の上限は 32 レベルですが、Microsoft SQL Server 2005 では、1 つのプロシージャから呼び出せるストアド プロシージャの数に制限はありません。ただし、これは従属ストアド プロシージャで他の従属ストアド プロシージャが呼び出されず、入れ子の最大レベルを超えないことが前提となっています。

参照

その他の技術情報

@@NESTLEVEL (Transact-SQL)
RETURN (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手