SQL 2005 递归查询
WITH digui AS
(
SELECT ID,[Values],ParentId FROM CTES WHERE ID=1
UNION ALL
SELECT CTES.ID,CTES.[Values],CTES.ParentId FROM digui JOIN CTES ON CTES.ParentId = digui.ID
)
SELECT * FROM digui
/*
一个递归的CTE最少须要包含两个查询(也称为成员)。
第一个查询称为 定位点成员(anchor member)。定位点成员 只是一个返回有效表的查询,用于递归的基础或定位点。定位点成员 直接返回输入的根级所在行。
第二个查询称为 递归成员(recursive member)。使该查询成为递归成员的是对 CTE 名称(digui)的递归引用。注意这种引用不同于在外部查询中对 CTE 名称的引用。
外部查询中的引用得到的是由 CTE 返回的最终结果表,不包含递归。而内部引用是在 CTE 的结果表确定之前使用的 , 它是触发递归的关键元素 。
不严格的说 , 对 CTE 名称的内部引用代表 "前一个结果集" 。 第一次调用递归成员时 , CTE 名称引用代表由定点成员返回的结果集 。
递归成员 遇到返回空结果集时 , 退出循环调用。
*/
积少成多 共享 交流 进步