2016-06-03 14 views
1

tut Ich habe die aktuelle Tabelle der Daten ...CTE - rekursive Abfrage zu viel

| 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    | 

Ich versuche, in an NewLoanID 1108 zu springen und sehen, wie es aus früheren Darlehen entwickelt hat. zB 1108 kam von 1106, die von 104 kamen, die aus 81 kam, usw.

Wenn ich diese Abfrage ausführen:

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 

Es schlägt mit diesem Fehler:

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

Kann jemand Finde meinen Fehler bitte? Danke.

+0

MS SQL Server 2014 - danke – dstewart101

Antwort

2

Die Aliase in der CTE Definition ist in der falschen Reihenfolge:

-- 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 

Das gleiche gilt für die ON Klausel in der rekursiven Elemente Definition.

+0

ah vielen Dank. Ich konnte das überhaupt nicht sehen! – dstewart101