【发布时间】:2011-02-04 12:41:32
【问题描述】:
尝试从 XML 中同时检索父值和子值时遇到问题。代码如下所示,但每个父母只能检索 1 个孩子。如何选择父级的所有子级?
declare @x xml;
set @x = '
<Parent ParentID="1" ParentName="Mary">
<Child ChildID="2" ChildName="Paul" />
<Child ChildID="3" ChildName="Alan" />
<Child ChildID="4" ChildName="David" />
</Parent>
<Parent ParentID="5" ParentName="James">
<Child ChildID="6" ChildName="Amy" />
<Child ChildID="7" ChildName="Julie" />
</Parent>
';
select
tbl.col.value('@ParentID', 'int') AS ParentID,
tbl.col.value('@ParentName', 'varchar(50)') AS ParentName,
tbl.col.value('Child[1]/@ChildID[1]', 'int') AS ChildID,
tbl.col.value('Child[1]/@ChildName[1]', 'varchar(50)') AS ChildName
from @x.nodes('/Parent') as tbl(col);
我得到以下结果,但希望父节点为每个子节点重复。
ParentID ParentName ChildID ChildName
1 Mary 2 Paul
5 James 6 Amy
问题是孩子[1],但我不知道如何解决它。我尝试了 sql-variable 但也无法让它工作。理想情况下,我希望看到以下内容:
ParentID ParentName ChildID ChildName
1 Mary 2 Paul
1 Mary 3 Alan
1 Mary 4 David
5 James 6 Amy
5 James 7 Julie
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: sql-server xml