CTE和分层XML结果

时间:2010-10-22 08:47:08

标签: sql-server xml sql-server-2008

平,

我有一个简单的CTE,它带有分层的项目列表(父/子关系)。如何在保留层次结构的同时使用“FOR XML”sql语法将其转换为XML?

谢谢, Espen

1 个答案:

答案 0 :(得分:0)

要构建hieararchy,您需要以模仿您尝试构建的层次结构的方式“堆叠”查询。如果您只使用一个表或CTE来构建XML,则需要尝试在sql调用中使“父”元素不同。看看我在下面选择父母时如何使用不同的

示例:

use tempdb
GO
IF OBJECT_ID('tempdb..#ParentChild')IS NOT NULL DROP TABLE #ParentChild
CREATE TABLE #ParentChild(
ID              int identity(1,1),
ParentID        int,
ParentName      varchar(25),
ChildName       varchar(25));

Insert Into #ParentChild
Values(1,'John','Mike');

Insert Into #ParentChild
Values(1,'John','Russ');

Insert Into #ParentChild
Values(1,'John','Stan');

Select 
    pc.ParentName AS '@parent',
    (Select 
        p.ChildName as '@child'
     From #ParentChild p
     Where p.ParentID = pc.ParentID
     FOR XML PATH('children'),TYPE)
From (Select Distinct ParentID,ParentName
      From #ParentChild) pc
FOR XML PATH('parent'),TYPE

DROP TABLE #ParentChild;