@@NESTLEVEL (Transact-SQL)

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

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

Синтаксис

@@NESTLEVEL

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

int

Замечания

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

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

Примеры

А.Использование функции @@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

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

Основные понятия

Создание хранимой процедуры