从父-子xml内容中选择



我一直在寻找从包含xml列的表[Group]中选择父子关系的解决方案。

[组]表具有以下结构:

  • ID-int
  • 内容-xml

Content 列中存在xml数据-父子关系

<root>
<person name="John">
<device name="notebook" />
<device name="xbox" />   
</person>
<person name="Jane">
<device name="TV" />
</person>
<person name="Mark">
</person>
</root>

我想选择以下格式的数据:

DeviceName电视
组IdPersonName
1John笔记本
1Johnxbox
1Jane

正如我所提到的,您可以使用XQuery来实现这一点。由于您不希望Mark有任何行,所以我直接转到nodes方法中的device节点,因为这意味着找不到Mark的行。然后你可以回到一个级别来获取此人的姓名:

SELECT V.ID AS GroupID,
p.d.value('../@name','nvarchar(50)') AS PersonName,
p.d.value('@name','nvarchar(50)') AS DeviceName
FROM(VALUES(1,CONVERT(xml,'<root>
<person name="John">
<device name="notebook" />
<device name="xbox" />   
</person>
<person name="Jane">
<device name="TV" />
</person>
<person name="Mark">
</person>
</root>')))V(ID, Content)
CROSS APPLY V.Content.nodes('root/person/device') p(d);

最新更新