2016-06-03 2 views
1

내가 가지고있는 현재 테이블을하고 재귀 쿼리 ... 내가 NewLoanID 1108에서 뛰어가 이전 대출에서 진화했다 방법을 볼려고CTE - 데이터의 너무 많은

| LoanRollupID | NewLoanID | PreviousLoanID | 
|--------------|-----------|----------------| 
| 11   | 76  | 44    | 
| 12   | 80  | 75    | 
| 13   | 83  | 82    | 
| 14   | 84  | 83    | 
| 15   | 86  | 85    | 
| 16   | 87  | 54    | 
| 17   | 88  | 87    | 
| 18   | 90  | 48    | 
| 19   | 91  | 34    | 
| 20   | 93  | 41    | 
| 21   | 94  | 76    | 
| 22   | 95  | 90    | 
| 23   | 96  | 94    | 
| 24   | 100  | 92    | 
| 25   | 101  | 99    | 
| 26   | 102  | 98    | 
| 27   | 103  | 101   | 
| 28   | 104  | 81    | 
| 29   | 105  | 80    | 
| 30   | 107  | 52    | 
| 31   | 110  | 108   | 
| 1029   | 1105  | 103   | 
| 1030   | 1106  | 104   | 
| 1031   | 1108  | 1106   | 
| 1032   | 1109  | 73    | 

. 예를 들어, 1108 (81)로부터 온 (104), 온, 이는 1106에서 온 등

나는이 쿼리를 실행하면 :

WITH OldLoans (PreviousLoanID, NewLoanID, start) 
AS 
(
---- Anchor member definition 
SELECT l.NewLoanID, l.PreviousLoanID, 0 as start 
FROM dscs_public.LoanRollup l 
Where NewLoanID = 1108 
UNION ALL 
-- Recursive member definition 
SELECT l.NewLoanID, l.PreviousLoanID, start + 1 
FROM dscs_public.LoanRollup l 
INNER JOIN OldLoans AS o 
    ON o.NewLoanID = l.PreviousLoanID 
) 
---- Statement that executes the CTE 
SELECT PreviousLoanID, NewLoanID, start 
FROM OldLoans 

그것은이 오류와 함께 실패

The statement terminated. The maximum recursion 100 has been exhausted before statement completion.

수있는 사람 내 실수로 얼룩? 감사합니다. . CTE 정의

+0

MS SQL Server 2014 - 덕분에 – dstewart101

답변

2

별명을 잘못된 순서로 있습니다

-- Instead of (PreviousLoanID, NewLoanID, start) 
WITH OldLoans (NewLoanID, PreviousLoanID, start) 
AS 
(
    ---- Anchor member definition 
    SELECT l.NewLoanID, l.PreviousLoanID, 0 as start 
    FROM mytable l --LoanRollup l 
    Where NewLoanID = 1108 

    UNION ALL 

    -- Recursive member definition 
    SELECT l.NewLoanID, l.PreviousLoanID, start + 1 
    FROM mytable l --dscs_public.LoanRollup l 
    INNER JOIN OldLoans AS o 
     -- Instead of o.NewLoanID = l.PreviousLoanID 
     ON l.NewLoanID = o.PreviousLoanID 

) 
---- Statement that executes the CTE 
SELECT PreviousLoanID, NewLoanID, start 
FROM OldLoans 

같은 일이 재귀 멤버 정의에서 ON 절에 대한 보유하고 있습니다.

+0

아. 고맙습니다. 그걸 전혀 볼 수 없었어요! – dstewart101