SQL递归查询

时间:2010-01-08 05:47:33

标签: sql sql-server-2005 recursion

  

可能重复:
  Recursive function in sql server 2005?

如何对表执行迭代查询?我有一个简单的表格,包括:

KeyField, childID, parentID

从childID开始,我想拉取parentID然后再次查询以查看该父级(现在是子级)是否具有自己的父级,在整个层次结构中进行操作,我该如何做?

Microsoft SQL Server,版本号09.00.3042

1 个答案:

答案 0 :(得分: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