2013-10-01 2 views
2

내 테이블에 XML 열이 있습니다. 나는 두 노드에 삽입하려고XML 데이터를 여러 번 삽입하는 중

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

: 나는이 시도 : XML 구조는 다음과 같이이다

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