Heim > Datenbank > MySQL-Tutorial > Wie wird ein rekursiver CTE Zeile für Zeile in SQL Server ausgeführt?

Wie wird ein rekursiver CTE Zeile für Zeile in SQL Server ausgeführt?

Mary-Kate Olsen
Freigeben: 2024-12-30 09:52:10
Original
349 Leute haben es durchsucht

How Does a Recursive CTE Execute Line by Line in SQL Server?

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
Nach dem Login kopieren
  • Der Anker wählt die Knoten der obersten Ebene aus, wobei ParentId NULL ist.
  • Er projiziert die Folgende Spalten: ID, Name, ParentID und eine Pfadspalte, initialisiert mit den Knoten Name.

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
Nach dem Login kopieren
  • Das rekursive Mitglied wählt untergeordnete Knoten aus, indem es die temporäre Tabelle abcd mit @tbl basierend auf ParentId verknüpft.
  • Es hängt den Namen des untergeordneten Knotens an den des übergeordneten Knotens an Pfad.

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

  • Der Anker ist niemals in späteren Iterationen übersprungen. Es wählt immer die Knoten der obersten Ebene aus.
  • Das rekursive Mitglied verbindet untergeordnete Knoten mit den zuvor ausgewählten Knoten und erstellt so eine hierarchische Struktur.
  • Mit fortschreitender Iteration wird die Spalte „Pfad“ entsprechend aktualisiert die richtigen Eltern-Kind-Beziehungen.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage