Для поля xml (SQL Server) мне нужно добавить узел в каждый подузел на основе исходной таблицы и условия. Это мои данные xml:
declare @X table (XMLDATA xml)
insert @X values('
<row>
<node>
<name>Francesco</name>
</name>
<node>
<label>Alessandro</name>
</node>
<node>
<name>Daniele</name>
</node>
</row>')
Для каждого <name>
я хочу добавить узел <number>
. Совпадения номеров и имен записываются в таблицу @T
:
declare @T table (name varchar(20), number int)
insert @T values
('Alessandro', 24)
,('Francesco', 10)
,('Daniele', 16)
Для обновления узлов я использую XMLDATA.modify
и использую условия xpath для выбора правильного узла:
update @X set XMLDATA.modify('insert element number {sql:column("number")} as last into (row/node[name=sql:column("name")])[1]')
from @X
cross join @T
Приведенный выше запрос работает только для первой строки @T
(в примере это Alessandro/24). Остальные 2 строки @T
игнорируются. Мне нужно добавить number
к каждому node
. Это окончательные XMLDATA:
<row>
<node>
<name>Francesco</name>
</node>
<node>
<name>Alessandro</name>
<number>24</number>
</node>
<node>
<name>Daniele</name>
</node>
</row>
fieldxml.modify()
и синтаксис для обновления многих узлов подряд. Я ошибаюсь, и обходной путь, который мне помог, должен быть помечен как правильный ответ? - person Radioleao   schedule 16.02.2017