@@NESTLEVEL (Transact-SQL)

Возвращает уровень вложенности выполняющейся в данный момент хранимой процедуры (изначально равен 0). Дополнительные сведения об уровнях вложенности см. в разделе Вложенные хранимые процедуры.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

@@NESTLEVEL

Типы возвращаемых данных

int

Замечания

Каждый раз, когда хранимая процедура вызывает другую хранимую процедуру или выполняет управляемый код путем обращения к подпрограмме, типу или статистическому выражению среды CLR, уровень вложенности возрастает. При достижении максимального уровня 32 транзакция прекращается.

Если функция @@NESTLEVEL выполняется внутри строки на языке Transact-SQL, возвращается значение 1 + текущий уровень вложенности. Если функция @@NESTLEVEL выполняется динамически с помощью процедуры sp_executesql, возвращается значение 2 + текущий уровень вложенности.

Примеры

A. Использование функции @@NESTLEVEL в процедуре

На следующем примере показано, как создаются две процедуры: одна вызывает другую, а еще одна отображает значение функции @@NESTLEVEL для первых двух.

USE AdventureWorks;
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

Б. Вызов функции @@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)

Другие ресурсы

Создание хранимых процедур (компонент Database Engine)

Справка и поддержка

Получение помощи по SQL Server 2005