2010-01-08 7 views
4

가능한 중복 : 당신이 테이블에 반복 쿼리를 수행하려면 어떻게
Recursive function in sql server 2005?SQL 재귀 쿼리

? 나는 작업의 parentID를 당겨 후 (지금 아이입니다) 그 부모가 자신의 부모가 있는지 확인하기 위해 다시 조회 할

KeyField, childID, parentID 

는 childID 시작 : 나는 구성된 간단한 테이블이 완전한 계층 구조를 통해, 어떻게해야합니까?

마이크로 소프트 SQL 서버, 버전 번호 09.00.3042

+1

중복의 골라 봐 : http://stackoverflow.com/search?q=recursive+cte –

+1

특히 : http://stackoverflow.com/questions/1709397/recursive-function-in-sql-server-2005 –

+0

그래, 많은 복제본 - 재귀 CTE에 대해 알고 있지 않으면 사용하려는 검색어를 알지 못하는 성가신 사례 중 하나입니다. –

답변

5
SQL Server 2005에서

이상에서는 쿼리 이런 종류의 재귀 CTE (공통 테이블 식)를 사용하는 것이 가장 적합합니다. (SQL 2000 및 이전 버전에서는 재귀 저장 프로 시저 사용이 제한적이었습니다).

다음과 같은 뭔가 당신이 필요로하는 무엇을 :

WITH ParentChildRels (ParentId, ChildId, KeyField, HierarchyLevel) AS 
(
    -- Base case 
    SELECT 
     ParentId, 
     ChildId, 
     KeyField, 
     1 as HierarchyLevel 
    FROM Records 
    WHERE ChildId = @ChildId 

    UNION ALL 

    -- Recursive step 
    SELECT 
     r.ParentId, 
     r.ChildId, 
     r.KeyField, 
     pr.HierarchyLevel + 1 AS HierarchyLevel 
    FROM Records r 
     INNER JOIN ParentChildRels pr ON 
     r.ParentId = pr.ParentId 
) 

SELECT * 
FROM ParentChildRels 
ORDER BY HierarchyLevel, ParentId, ChildId, KeyField 
+0

재귀 WITH는 재귀 쿼리를 처리하기위한 ANSI 표준이지만 지원은 제한된. 오라클은 11g에서 재귀 WITH를 지원하지만 WITH은 9i +를 지원하며 자체 계층 적 구문을 사용합니다. –