Поделиться через


@@NESTLEVEL (Transact-SQL)

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

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

Синтаксис

@@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)