본문 바로가기
IT/MSSQL

[MSSQL] MAXRECURSION 힌트(무한 루프 진입방지 제한)

by 베베야 2023. 4. 15.
728x90

MSSQL 힌트 'MAXRECURSION'이라는 힌트가 존재한다

 

MAXRECURSION 힌트란?

MSSQL에서 사용하는 최대 재귀 횟수 설정하는 힌트입니다.

잘못 구성된 재귀 공통 테이블 식이 무한 루프에 진입하는 것을 방지하는 데 MAXRECURSION을 사용할 수 있습니다.

 

MAXRECURSION 예제

아래에서는 의도적으로 무한 루프를 만들고 MAXRECURSION 힌트를 사용하여 재귀 수준을 2로 제한하는 방법을 보여 줍니다.

이 예에서는 AdventureWorks2016 데이터베이스를 사용합니다

--Creates an infinite loop
use AdventureWorks2016
go

WITH cte (CustomerID, PersonID, StoreID) AS
(
    SELECT CustomerID, PersonID, StoreID
    FROM Sales.Customer
    WHERE PersonID IS NOT NULL
  UNION ALL
    SELECT cte.CustomerID, cte.PersonID, cte.StoreID
    FROM cte
    JOIN  Sales.Customer AS e
        ON cte.PersonID = e.CustomerID
)

--Uses MAXRECURSION to limit the recursive levels to 2
SELECT CustomerID, PersonID, StoreID
FROM cte
OPTION (MAXRECURSION 2);
GO

 

만약 힌트를 제거하고 무한루프 쿼리를 실행하면 어떤 결과를 가져올까?

아래와 같이 '최대 재귀 횟수(100)가 초과되었습니다.' 라는 오류 메시지가 발생한다.

최대가 기본으로 100으로 설정 되어있다.

반응형
그리드형

댓글