平,
我有一个简单的CTE,它带有分层的项目列表(父/子关系)。如何在保留层次结构的同时使用“FOR XML”sql语法将其转换为XML?
谢谢, Espen
答案 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;