Dieses rekursive CTE läuft für immer (gibt nie Ergebnisse zurück), wenn die gleichen Ergebnisse per Hand erhalten würden, würde ungefähr 10 Sekunden dauern, wobei das meiste Kopieren-Einfügen ist.Rekursives CTE beendet nie
- Habe ich den RekeyLevel Teil falsch implementiert? Steigt es nicht richtig auf?
- Wie würde ich es so machen, dass die Rekursion stoppt, wenn keine Ergebnisse gefunden werden, anstatt eine Failsafe wie
RekeyLevel <= 2
zu benötigen?
Aktuelle Abfrage:
with RekeysAllLevelsDeep as (
select
a.claimid as Rekey
,a.ClaimIDAdjFromOrig as Original
,0 as RekeyLevel
from <base table> (nolock) a
where a.ClaimIDAdjFromOrig is not null
and a.ClaimIDAdjFromOrig <> a.ClaimID
union all
select
a.claimid as Rekey
,a.ClaimIDAdjFromOrig as Original
,RekeyLevel + 1
from RekeysAllLevelsDeep
join <base table> (nolock) a
on RekeysAllLevelsDeep.Original = a.ClaimID
where a.ClaimIDAdjFromOrig is not null
and a.ClaimIDAdjFromOrig <> a.ClaimID
and RekeyLevel <= 2
)
select distinct
Rekey
,Original
,RekeyLevel
from RekeysAllLevelsDeep
where Original is not null
and Original <> Rekey
and Rekey = '(<number>)'
Begrenzung der Tiefe manuell, z. mit 'RekeyLevel', und das Untersuchen der Ergebnisse weist normalerweise auf das Problem hin. [This] (https://stackoverflow.com/questions/15080922/infinite-loop-cte-with-option-maxrecursion-0/15081353#15081353) Antwort zeigt eine Möglichkeit, Schleifen in Daten während der Rekursion zu behandeln. Tipp: Es ist hilfreich, Datenbankfragen mit der entsprechenden Software (MySQL, Oracle, DB2, ...) und der Version, z. 'sql-server-2014'. Unterschiede in Syntax und Funktionen beeinflussen oft die Antworten. Beachten Sie, dass 'tsql' die Auswahl einschränkt, aber die Datenbank nicht angibt. – HABO
@HABO Tolle Tipps, danke! Ich habe ein 'SQL-Server-2014'-Tag hinzugefügt. Außerdem habe ich versucht, die Tiefe manuell zu begrenzen ('RekeyLevel <= 2'), habe aber immer noch das Problem. Das ließ mich vermuten, dass ich nicht richtig levelte und zum ersten Teil meiner Frage führte. Danke, dass du es gesehen hast, hoffentlich sieht jemand etwas. – puzzlepiece87