====== 재귀 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)