Выбор значений узлов XML из нескольких XML - PullRequest
1 голос
/ 27 июня 2019

У меня есть таблица с несколькими строками. Каждая строка содержит типизированное поле XML «дескриптор». Дескриптор выглядит так:

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

В 'root' может быть несколько (0-100) узлов 'item'.

Я хочу выбрать имя всех элементов из дескриптора всех строк таблицы одновременно (как-то так):

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 Ответ

1 голос
/ 27 июня 2019

Вы, вероятно, хотели использовать 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);

ДБ <> Fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...