@@NESTLEVEL (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
現在のストアド プロシージャがローカル サーバーで実行中のトランザクションの入れ子レベルを返します (初期値は 0)。
構文
@@NESTLEVEL
戻り値の型
int
解説
ストアド プロシージャが、別のストアド プロシージャを呼び出すか、または共通言語ランタイム (CLR) ルーチン、型、集計を参照してマネージド コードを実行するたびに、入れ子のレベルがインクリメントされます。 最大の 32 を超えると、トランザクションが終了します。
Transact-SQL 文字列内で @@NESTLEVEL が実行されると、返される値は、現在の入れ子レベルに 1 を加えた値になります。 sp_executesql を使用して @@NESTLEVEL が動的に実行されると、返される値は、現在の入れ子レベルに 2 を加えた値になります。
例
A. プロシージャで @@NESTLEVEL を使用する
次の例では、別のプロシージャを呼び出すプロシージャと、それぞれの @@NESTLEVEL
設定を表示するプロシージャの、2 つのプロシージャを作成します。
USE AdventureWorks2022;
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 を呼び出す
次の例では、SELECT
、EXEC
、および 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)