@@NESTLEVEL (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

返回在本地服务器上执行的当前存储过程的嵌套级别(初始值为 0)。

Transact-SQL 语法约定

语法

@@NESTLEVEL  

返回类型

int

备注

每次一个存储过程通过引用公共语言运行时 (CLR) 例程、类型或聚合来调用另一个存储过程或执行托管代码时,嵌套级别都会增加。 超过最大级数 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

以下示例显示 SELECTEXECsp_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)