@@NESTLEVEL (Transact-SQL)

現在のストアド プロシージャがローカル サーバーで実行中のトランザクションの入れ子レベルを返します (初期値は 0)。入れ子レベルについては、「ストアド プロシージャの入れ子」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

@@NESTLEVEL

戻り値の型

int

解説

ストアド プロシージャが別のストアド プロシージャを呼び出したり、共通言語ランタイム (CLR) のルーチン、型、または集計を参照してマネージ コードを実行するたびに、入れ子レベルが増加します。この値が最大値の 32 を超えると、そのトランザクションは終了します。

Transact-SQL 文字列内で @@NESTLEVEL が実行されると、返される値は、現在の入れ子レベルに 1 を加えた値になります。sp_executesql を使用して @@NESTLEVEL が動的に実行されると、返される値は、現在の入れ子レベルに 2 を加えた値になります。

A. プロシージャで @@NESTLEVEL を使用する

次の例では、別のプロシージャを呼び出すプロシージャと、それぞれの @@NESTLEVEL 設定を表示するプロシージャの、2 つのプロシージャを作成します。

USE AdventureWorks;
GO
IF OBJECT_ID (N'usp_OuterProc', N'P')IS NOT NULL
    DROP PROCEDURE usp_OuterProc;
GO
IF OBJECT_ID (N'usp_InnerProc', N'P')IS NOT NULL
    DROP PROCEDURE usp_InnerProc;
GO
CREATE PROCEDURE usp_InnerProc AS 
    SELECT @@NESTLEVEL AS 'Inner Level';
GO
CREATE PROCEDURE usp_OuterProc AS 
    SELECT @@NESTLEVEL AS 'Outer Level';
    EXEC usp_InnerProc;
GO
EXECUTE usp_OuterProc;
GO

以下に結果セットを示します。

Outer Level
-----------
1          

Inner Level
-----------
2

B. @@NESTLEVEL を呼び出す

次の例では、SELECTEXEC、および sp_executesql のそれぞれが @@NESTLEVEL を呼び出すときに、それらが返す値の違いを示します。

CREATE PROC usp_NestLevelValues AS
    SELECT @@NESTLEVEL AS 'Current Nest Level';
EXEC ('SELECT @@NESTLEVEL AS OneGreater'); 
EXEC sp_executesql N'SELECT @@NESTLEVEL as TwoGreater' ;
GO
EXEC usp_NestLevelValues;
GO

以下に結果セットを示します。

Current Nest Level 
------------------ 
1

(1 row(s) affected)

OneGreater  
----------- 
2

(1 row(s) affected)

TwoGreater  
----------- 
3

(1 row(s) affected)

参照

関連項目

構成関数 (Transact-SQL)
@@TRANCOUNT (Transact-SQL)

その他の技術情報

ストアド プロシージャの作成 (データベース エンジン)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手