@@NESTLEVEL (Transact-SQL)
Возвращает уровень вложенности выполняющейся в данный момент хранимой процедуры (изначально равен 0). Дополнительные сведения об уровнях вложенности см. в разделе Вложенные хранимые процедуры.
Синтаксис
@@NESTLEVEL
Типы возвращаемых данных
int
Замечания
Каждый раз, когда хранимая процедура вызывает другую хранимую процедуру или выполняет управляемый код путем обращения к подпрограмме, типу или статистическому выражению среды CLR, уровень вложенности возрастает. При достижении максимального уровня 32 транзакция прекращается.
Если функция @@NESTLEVEL выполняется внутри строки на языке Transact-SQL, возвращается значение 1 + текущий уровень вложенности. Если функция @@NESTLEVEL выполняется динамически с помощью процедуры sp_executesql, возвращается значение 2 + текущий уровень вложенности.
Примеры
A. Использование функции @@NESTLEVEL в процедуре
На следующем примере показано, как создаются две процедуры: одна вызывает другую, а еще одна отображает значение функции @@NESTLEVEL для первых двух.
USE AdventureWorks2008R2;
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
Ниже приводится результирующий набор.
Внешний уровень
-----------
1
Внутренний уровень
-----------
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
Ниже приводится результирующий набор.
Текущий вложенный уровень
------------------
1
(Обработано строк: 1)
OneGreater
-----------
2
(Обработано строк: 1)
TwoGreater
-----------
3
(Обработано строк: 1)
См. также