【问题标题】:CTE and Hierarchical XML ResultCTE 和分层 XML 结果
【发布时间】:2010-10-22 08:47:07
【问题描述】:
嘿,
我有一个简单的 CTE,它带有项目的分层列表(父/子关系)。如何在保留层次结构的同时使用“FOR XML”sql 语法将其转换为 XML?
谢谢,
埃斯彭
【问题讨论】:
标签:
sql-server
xml
sql-server-2008
【解决方案1】:
要构建层次结构,您需要以模仿您尝试构建的层次结构的方式“堆叠”查询。如果您只使用一个表或 CTE 来构建您的 XML,您需要尝试在 sql 调用中使“父”元素不同。看看我在下面选择父级时如何使用 distinct
例子:
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;