@@NESTLEVEL(Transact-SQL)
로컬 서버의 현재 저장 프로시저 실행의 중첩 수준을 반환합니다(초기값 0).
구문
@@NESTLEVEL
반환 형식
int
주의
저장 프로시저가 다른 저장 프로시저를 호출하거나 CLR(공용 언어 런타임) 루틴, 유형 또는 집계를 참조하여 관리 코드를 실행할 때마다 중첩 수준이 증가합니다. 최대값 32를 초과하면 트랜잭션이 종료됩니다.
@@NESTLEVEL이 Transact-SQL 문자열 내에서 실행되는 경우 현재 중첩 수준 + 1 값이 반환됩니다. sp_executesql을 사용하여 @@NESTLEVEL이 동적으로 실행되는 경우 현재 중첩 수준 + 2 값이 반환됩니다.
예
1.프로시저에서 @@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
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)