Zeilenweise Ausführung eines rekursiven CTE
Rekursive Common Table Expressions (CTEs) sind oft schwer zu verstehen, aber sie können es verstanden werden, indem man ihre Ausführungslinie nach aufschlüsselt Zeile.
Anker
SELECT id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path FROM @tbl WHERE ParentId IS NULL
Rekursives Mitglied
SELECT t.id, t.Name, t.ParentID, CAST((a.path + '/' + t.Name) AS VARCHAR(1000)) AS "Path" FROM @tbl AS t JOIN abcd AS a ON t.ParentId = a.id
Endloses UNION ALL
Stellen Sie sich den rekursiven CTE als ein endloses UNION ALL vor, das sich horizontal erweitert und mit jeder Iteration neue Hierarchieebenen hinzufügt. Beispielsweise würde abcd2 untergeordnete Knoten von abcd1 einschließen, abcd3 würde untergeordnete Knoten von abcd2 usw. einschließen.
Jede Iteration
Aufhören Bedingung
Theoretisch kann ein rekursiver CTE unbegrenzt laufen. Allerdings verhindert SQL Server unendliche Recordsets durch die Implementierung einer Stoppbedingung. Wenn ein rekursives Mitglied keine neuen Zeilen erzeugt, stoppt die Iteration.
In diesem Beispiel endet die Iteration, wenn das rekursive Mitglied keine untergeordneten Knoten für Ebene abcd6 findet.
Endergebnis
Das Endergebnis ist ein vollständiger hierarchischer Baum, beginnend mit den Knoten der obersten Ebene und Ausweitung bis in die untersten Ebenen. Die Spalte „Pfad“ enthält den vollständigen Pfad zu jedem Knoten in der Hierarchie.
Das obige ist der detaillierte Inhalt vonWie wird ein rekursiver CTE Zeile für Zeile in SQL Server ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!