从多个XML中选择XML节点值

时间:2019-06-27 18:28:26

标签: sql xml join nodes

我有一个有几行的表。每行包含一个XML类型的字段“描述符”。描述符如下:

<root>
  <item name="a" />
  <item name="b" />
</root>

在“根”中可以有多个(0-100)个“项目”节点。

我想同时从所有表行的描述符中选择所有项目的名称(这样):

create table #mytable (descriptor xml)
insert into #mytable (descriptor) values ('<root><item name="a"/><item name="b"/></root>')
insert into #mytable (descriptor) values ('<root><item name="c"/></root>')

SELECT p.value('./@name', 'nvarchar(100)')
 FROM M.descriptor.nodes('/root/item') as p(p)
 INNER JOIN #mytable M on 1=1
 OPTION ( OPTIMIZE FOR ( M.descriptor = NULL ) ) 

但是它不起作用:(我缺乏对.nodes()和其他sql特定的东西的知识(对不起)...仍然有可能吗?正确的语法是什么?在此先感谢!

1 个答案:

答案 0 :(得分:1)

您可能想使用CROSS APPLY

create table #mytable (descriptor xml)
insert into #mytable (descriptor) values ('<root><item name="a"/><item name="b"/></root>')
insert into #mytable (descriptor) values ('<root><item name="c"/></root>')

SELECT p.value('./@name', 'nvarchar(100)')
FROM #mytable M
CROSS APPLY M.descriptor.nodes('/root/item') as p(p);

db<>fiddle demo