如何在t-sql中检索分层XML?

时间:2008-11-05 14:46:24

标签: xml tsql

我的表格有以下架构:

id,parent_id,text

鉴于以下数据,我想返回一个xml层次结构:

数据:(1,null,'x'),(2,1,'y'),(3,1,'z'),(4,2,'a')

XML:
[row text =“x”]
 [row text =“y”]
  [row text =“a”/]
 [/行]
 [row text =“z”/]
[/ row]


补充:层次结构没有最大深度

2 个答案:

答案 0 :(得分:1)

如果你有一个有限的深度,那就是这样的快速:

SELECT T.*, T2.*, T3.* /*, ...*/ FROM myTable T 
INNER JOIN myTable T2 ON T2.parent_id=T.id
INNER JOIN myTable T3 ON T3.parent_id=T2.id
/* ... */
WHERE T.parent_id IS NULL
FOR XML AUTO

我不确定,但可以使用recursive queries设计类似的结果。当然,在应用程序级别上它更容易(也可能更有意义)。

答案 1 :(得分:-1)

这需要“传递性关闭”。您需要递归处理数据以查找给定父级下的所有子项。

粗略地算法看起来像这样。

for top in cursor( nodes where  each parent==null ):
    build_tree( top )

def build_tree( parent ):
    emit opening tag
    for child in cursor( nodes where parent == parent ):
        build_tree( child )
    emit closing tag

请注意,某些SQL解释器可能在递归时遇到问题 - 它们可能无法根据需要打开新的新游标。但是,每个游标必须是不同的,因为您将拥有与树有级别一样多的打开游标。