MSSQL-CTE 재귀쿼리 - MSSQL2005 이상

트리구조 등을 표현하려고 사용하다가, 메뉴나 코드관리에서 자주 사용했던 쿼리이며 List<>형태를 가져오기 위해 써먹었던놈입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH 지정이름CTE(menuCode, menuName, isPopup, menuURL, sortNo, menuLevel)
AS
(
SELECT menuCode, menuName, isPopup, menuURL, sortNo, 1 AS menuLevel
FROM 테이블명 WITH(NOLOCK)
WHERE 조건

UNION ALL

SELECT A.menuCode, A.menuName, A.isPopup, A.menuURL, A.sortNo, menuLevel + 1 AS menuLevel
FROM 테이블명 A WITH(NOLOCK) INNER JOIN
지정이름CTE B ON A.menuParentCode = B.menuCode
WHERE 조건
)
SELECT menuCode, menuName, isPopup, menuURL, sortNo, menuLevel
FROM 지정이름CTE WITH(NOLOCK)
ORDER BY sortNo
OPTION (MAXRECURSION 10)

첫번째 호출되는 결과집합(UNION ALL)을 만들고 하단 결과집합이 빈 집합이 될때까지 반복하는 원리입니다.