分享方式:


@@NESTLEVEL (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

傳回本機伺服器中執行目前預存程序的巢狀層級 (最初是 0)。

Transact-SQL 語法慣例

語法

@@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 時,SELECTEXECsp_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)

另請參閱

組態函數 (Transact-SQL)
建立預存程序
@@TRANCOUNT (Transact-SQL)