@@NESTLEVEL (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
傳回本機伺服器中執行目前預存程序的巢狀層級 (最初是 0)。
語法
@@NESTLEVEL
傳回型別
int
備註
每次預存程序呼叫另一個預存程序時,或參考 Common Language Runtime (CLR) 常式、類型或彙總來執行 Managed 程式碼時,巢狀層級都會遞增。 當到達最大值 32 時,交易便告終止。
在 Transact-SQL 字串內執行 @@NESTLEVEL 時,傳回的值是 1 + 目前的巢狀層級。 當利用 sp_executesql 來動態執行 @@NESTLEVEL 時,傳回的值是 2 + 目前的巢狀層級。
範例
A. 在程序中使用 @@NESTLEVEL
下列範例會建立兩個程序:一個程序呼叫另一個程序,一個程序顯示各程序的 @@NESTLEVEL
設定。
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
下列範例會示範當呼叫 @@NESTLEVEL
時,SELECT
、EXEC
及 sp_executesql
傳回值的差異。
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)