fla*_*404 4 sql recursion sql-server-2005
可能重复:
sql server 2005中的递归函数?
如何在表上执行迭代查询?我有一个简单的表格,包括:
KeyField, childID, parentID
Run Code Online (Sandbox Code Playgroud)
从childID开始,我想拉出parentID,然后再次查询以查看该父级(现在是子级)是否有自己的父级,在整个层次结构中进行操作,我该怎么做?
Microsoft SQL Server,版本号09.00.3042
在SQL Server 2005及更高版本中,最好使用递归CTE(公用表表达式)进行此类查询.(在SQL 2000及更早版本中,您仅限于使用递归存储过程).
您需要的是以下内容:
WITH ParentChildRels (ParentId, ChildId, KeyField, HierarchyLevel) AS
(
-- Base case
SELECT
ParentId,
ChildId,
KeyField,
1 as HierarchyLevel
FROM Records
WHERE ChildId = @ChildId
UNION ALL
-- Recursive step
SELECT
r.ParentId,
r.ChildId,
r.KeyField,
pr.HierarchyLevel + 1 AS HierarchyLevel
FROM Records r
INNER JOIN ParentChildRels pr ON
r.ParentId = pr.ParentId
)
SELECT *
FROM ParentChildRels
ORDER BY HierarchyLevel, ParentId, ChildId, KeyField
Run Code Online (Sandbox Code Playgroud)