====== 재귀 CTE( Recursive Common Table Expression ) ====== ===== 재귀 공통 테이블 표현식 ===== CTE는 이해하기 쉽고 읽기 쉽고 유지 관리가 쉬운 재귀 쿼리 를 작성하는 메커니즘을 제공 합니다 . CTE 이전에는 재귀 쿼리를 작성하는 유일한 메커니즘은 재귀 함수 또는 저장 프로 시저를 사용하는 것입니다. 그리고 이러한 재귀 함수 또는 저장 프로시 저는 최대 32 개 수준의 재귀 만 지원합니다. - 기본적으로 CTE는 최대 재귀 수준 100을 지원합니다. - CTE는 MAXRECURSION 수준 값을 0에서 32,767 사이로 설정하는 옵션도 제공합니다. - 값을 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)