@@NESTLEVEL (Transact-SQL)

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

主题链接图标 Transact-SQL 语法约定

语法

@@NESTLEVEL

返回类型

int

注释

每次一个存储过程通过引用公共语言运行时 (CLR) 例程、类型或聚合来调用另一个存储过程或执行托管代码时,嵌套级别都会增加。 超过最大级数 32 时,事务即被终止。

在 Transact-SQL 字符串中执行 @@NESTLEVEL 时,返回的值为 1 + 当前嵌套级别。 使用 sp_executesql 动态执行 @@NESTLEVEL 时,返回的值为 2 + 当前嵌套级别。

示例

A.在过程中使用 @@NESTLEVEL

以下示例将创建两个过程:一个过程调用另一个过程,一个过程显示每个过程的 @@NESTLEVEL 设置。

USE AdventureWorks2012;
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)

概念

创建存储过程