@@NESTLEVEL (Transact-SQL)

적용 대상: 예SQL Server(지원되는 모든 버전) 예Azure SQL Database 예Azure SQL Managed Instance

로컬 서버의 현재 저장 프로시저 실행의 중첩 수준을 반환합니다(초기값 0).

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

@@NESTLEVEL  

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

반환 형식

int

설명

저장 프로시저가 다른 저장 프로시저를 호출하거나 CLR(공용 언어 런타임) 루틴, 유형 또는 집계를 참조하여 관리 코드를 실행할 때마다 중첩 수준이 증가합니다. 최대값 32를 초과하면 트랜잭션이 종료됩니다.

@@NESTLEVEL이 Transact-SQL 문자열 내에서 실행되는 경우 현재 중첩 수준 + 1 값이 반환됩니다. @@NESTLEVEL이 sp_executesql을 사용하여 동적으로 실행되는 경우 현재 중첩 수준 + 2 값이 반환됩니다.

예제

A. 프로 시저에서 @@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

B. @@NESTLEVEL 호출

다음 예에서는 SELECT, EXECsp_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)