逐行执行递归 CTE
递归公用表表达式 (CTE) 通常很难掌握,但它们可以通过分解他们的执行线来理解
锚点
SELECT id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path FROM @tbl WHERE ParentId IS NULL
递归成员
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
将递归 CTE 视为水平扩展的无尽 UNION ALL,在每次迭代时添加新的层次结构级别。例如,abcd2 将包含 abcd1 的子节点,abcd3 将包含 abcd2 的子节点,依此类推。
每次迭代
停止条件
理论上,递归CTE可以无限期地运行。但是,SQL Server 通过实施停止条件来防止无限记录集。当递归成员未能生成任何新行时,迭代停止。
在此示例中,当递归成员未能找到级别 abcd6 的子节点时,迭代结束。
最终结果
最终结果是一个完整的层次树,从顶层节点开始,向下展开到最低水平。路径列提供层次结构中每个节点的完整路径。
以上是SQL Server 中的递归 CTE 如何逐行执行?的详细内容。更多信息请关注PHP中文网其他相关文章!