@@NESTLEVEL (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

@@NESTLEVEL  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

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

int

Замечания

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

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

Примеры

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

В следующем примере создаются две процедуры: первая вызывает вторую, а вторая отображает параметр @@NESTLEVEL каждой из процедур.

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