#tsql #xquery-sql
#tsql #xquery-sql
Вопрос:
допустим, у меня есть xml в поле типа SQL xml, например
@x='<root>
<item>
<title></title>
<item>
<title></title>
</item>
</item>
</root>'
Как бы я мог получить элементы n-го уровня в запросе?
Очевидно, что для получения первого уровня вы бы использовали;
select
t.p.query('.')
from
@x.nodes('/root/item') t(p)
и чтобы получить следующий уровень, вы также должны добавить
cross apply
@x.nodes('/root/item/item')
но во время выполнения мы не знаем, до какой глубины может дойти xml.
Кто-нибудь может указать мне правильное направление.
Спасибо!
Ответ №1:
Если вам нужны все узлы элемента, вы можете сделать это следующим образом
select t.p.query('.')
from @x.nodes('//item') t(p)
Результат:
(No column name)
<item><title /><item><title /></item></item>
<item><title /></item>
Если вам нужен только самый внутренний узел элемента, вы можете сделать это следующим образом
select
t.p.query('.')
from @x.nodes('//item[count(item) = 0]') t(p)
Результат:
(No column name)
<item><title /></item>
Комментарии:
1. вау, действительно так просто, просто дополнительная косая черта! большое спасибо!