2013-10-01 3 views
2

У меня есть столбец XML в моей таблице. Структура XML-то вроде этого:Вставка XML-данных в несколько случаев

<Nodes> 
    <Node> 
    <Name>a</Name> 
    </Node> 
    <Node> 
    <Name>a</Name> 
    </Node> 
    </Nodes> 

Я пытаюсь вставить в обоих узлах: Я попытался это:

SET @xml.modify('  
    insert <Phone>111</Phone> 
    into (/Nodes/Node)[1]') 

Но это вставляет телефон всего первого появления.

ответ

2

, к сожалению, вы не можете обновить несколько узлов внутри XML, вы можете использовать цикл:

select @i = @xml.value('count(Nodes/Node)', 'int') 

while @i > 0 
begin 
    set @xml.modify('insert <Phone>111</Phone> into (/Nodes/Node)[sql:variable("@i")][1]') 

    set @i = @i - 1 
end 

select @xml 

или вы можете восстановить свой XML, как это:

select 
    111 as Phone, 
    t.c.value('Name[1]', 'nvarchar(max)') as Name 
from @xml.nodes('Nodes/Node') as t(c) 
for xml path('Node'), root('Nodes') 

sql fiddle demo

+0

Благодарю. Первый работает хорошо. – user2561997

Смежные вопросы