사용자 도구

사이트 도구


sqlserver:recursive_cte

재귀 CTE( Recursive Common Table Expression )

재귀 공통 테이블 표현식

CTE는 이해하기 쉽고 읽기 쉽고 유지 관리가 쉬운 재귀 쿼리 를 작성하는 메커니즘을 제공 합니다 . CTE 이전에는 재귀 쿼리를 작성하는 유일한 메커니즘은 재귀 함수 또는 저장 프로 시저를 사용하는 것입니다. 그리고 이러한 재귀 함수 또는 저장 프로시 저는 최대 32 개 수준의 재귀 만 지원합니다.

  1. 기본적으로 CTE는 최대 재귀 수준 100을 지원합니다.
  2. CTE는 MAXRECURSION 수준 값을 0에서 32,767 사이로 설정하는 옵션도 제공합니다.
  3. 값을 0으로 지정하면 재귀 수준에 제한이 없음을 의미하며, 잘못 작성된 쿼리의 경우 무한 재귀 수준을 초래하는 위험에 동의했습니다.
WITH CTE AS (
    -- Anchor member definition
    SELECT 1 AS NN
 
    UNION ALL
 
    -- Recursive member definition
    SELECT NN + 1 FROM CTE
     WHERE NN < 10
)
SELECT *
  FROM CTE

option MAXRECURSION

WITH EmpRecursiveCTE(ManagerId, EmployeeId, Name, Level) AS
(
    SELECT ManagerId, Id, Name, 0 AS Level
    FROM dbo.Employees 
    WHERE ManagerId IS NULL
        UNION ALL
    SELECT E.ManagerId, E.Id, E.Name, Level + 1
    FROM dbo.Employees E
        INNER JOIN EmpRecursiveCTE EmpCTE
        ON E.ManagerID = EmpCTE.EmployeeId 
)
SELECT EmployeeId, Name, ManagerID, Level
FROM EmpRecursiveCTE
ORDER BY ManagerID
OPTION (MAXRECURSION 210)

최대 재귀 수준 32,767보다 큰 재귀 수준을 지원하는 방법은 무엇입니까?

OPTION (MAXRECURSION 0)

sqlserver/recursive_cte.txt · 마지막으로 수정됨: 2025/04/15 10:05 저자 127.0.0.1