Maison >base de données >tutoriel mysql >Comment un CTE récursif s'exécute-t-il ligne par ligne dans SQL Server ?
Exécution ligne par ligne d'un CTE récursif
Les expressions de table communes (CTE) récursives sont souvent difficiles à comprendre, mais elles peuvent être compris en décomposant leur ligne d'exécution par line.
Anchor
SELECT id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path FROM @tbl WHERE ParentId IS NULL
Membre récursif
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
UNION ALL sans fin
Pensez au CTE récursif comme un UNION ALL sans fin qui s'étend horizontalement, ajoutant de nouveaux niveaux de hiérarchie à chaque itération. Par exemple, abcd2 inclurait les nœuds enfants de abcd1, abcd3 inclurait les nœuds enfants de abcd2, et ainsi de suite.
Chaque itération
Arrêter Condition
Théoriquement, un CTE récursif peut s'exécuter indéfiniment. Toutefois, SQL Server empêche les jeux d'enregistrements infinis en implémentant une condition d'arrêt. Lorsqu'un membre récursif ne parvient pas à produire de nouvelles lignes, l'itération s'arrête.
Dans cet exemple, lorsque le membre récursif ne parvient pas à trouver des nœuds enfants pour le niveau abcd6, l'itération se termine.
Résultat final
Le résultat final est un arbre hiérarchique complet, commençant par les nœuds de niveau supérieur et s'étendant jusqu'à les niveaux les plus bas. La colonne Chemin fournit le chemin complet vers chaque nœud de la hiérarchie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!