SQL递归查询

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

Dav*_*all 5

在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)