请帮我解决这个遍历查询

时间:2012-05-18 05:27:54

标签: asp.net sql-server tsql

CatID  parID  catName
1      -1        A
2       1        B  
3       2        C
4       3        D

我想编写一个以字符串格式返回父子关系的查询。

在上表中,catName有parentId -1,这表示它没有父节点。 B具有parentID 1,这意味着A是其父级。

所以最后字符串是这样的

A=>B=>c=>D

这是我想要生成查询的方式。

我将传递CatID,它将遍历,直到它变为-1。

3 个答案:

答案 0 :(得分:3)

declare @CatID int;
set @CatID = 4;

with C as
(
  select parID,
         cast(catName as varchar(max)) as catName
  from YourTable
  where CatID = @CatID
  union all
  select T.parID,
         T.catName + '=>' + C.catName
  from YourTable as T
    inner join C
      on T.CatID = C.parID
)
select catName
from C
where parID = -1

SE-Data

答案 1 :(得分:1)

作为部分答案,听起来您需要递归查询。 Here是一个StackOverflow线程,提供有关递归查询的一些好信息。至于如何使用查询将其转换为单个字符串,我不知道......该部分可能更适合编程语言。

答案 2 :(得分:1)

你需要定义函数然后在递归循环中调用它。

您可以使用MPTT (Modified Preorder Tree Traversal)存储嵌套树或分层数据。

this article描述了如何在单个查询中获得分层“breadcrumb”。