Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает уровень вложенности выполняющейся в данный момент хранимой процедуры (изначально равен 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)