다음을 통해 공유


@@NESTLEVEL(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

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

Transact-SQL 구문 표기 규칙

구문

@@NESTLEVEL  

반환 형식

int

설명

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

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

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