@@NESTLEVEL (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Возвращает уровень вложенности выполняющейся в данный момент хранимой процедуры (изначально равен 0).
Соглашения о синтаксисе Transact-SQL
Синтаксис
@@NESTLEVEL
Типы возвращаемых данных
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)