4
你如何对表执行迭代查询?我有一个简单的表,它由一个:
KeyField, childID, parentID
与childID的开始,我想拉的parentID,然后再次查询,看是否父母(也就是现在的孩子)都有自己的父母,工作通过完整的层次结构,我该怎么做?
的Microsoft SQL Server,版本号09.00.3042
你如何对表执行迭代查询?我有一个简单的表,它由一个:
KeyField, childID, parentID
与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
递归WITH是用于处理递归查询的ANSI标准,但支持是有限。 Oracle支持11g中的递归WITH,但WITH支持9i +并且它有自己的分层语法。 – 2010-01-08 06:13:28
把你重复的挑:http://stackoverflow.com/search?q=recursive+cte – 2010-01-08 05:51:11
特别:http://stackoverflow.com /问题/ 1709397 /递归函数在SQL服务器2005年 – 2010-01-08 05:53:15
是的,大量的重复 - 虽然这是一个恼人的情况下,除非知道递归CTE,人们可能不知道搜索条件使用。 – 2010-01-08 05:54:50