2013-07-30 36 views
4

這被存儲在一個名爲USERDEF如何在XML列上使用修改替換填充空的XML節點?

<Orders> 
    <Document> 
    <DocumentID>abc123</DocumentID> 
    <ActualShipDate /> 
    <Comments/> 
    </Document> 
    <Document> 
.... 
... 
    </Document> 
</Orders> 

我試圖填充Comments元素與此XML類型列我的xml:

declare @t1 table (id bigint, userdef xml) 

insert into @t1 
select id, userdef from MyMainTable 

update @t1 
set userdef.modify('replace value of(/Orders/Document/Comments[1]/text())[1] with "NO COMMENTS"') 
select * from @t1 

不過,我沒有看到Comments是根本就是人口稠密。爲了實現這個目標,我應該做些什麼改變?

回答

4

<Comments/>沒有text()節點,你應該做的insert而不是replace

update @t1 
    set userdef.modify(' 
     insert text{"NO COMMENTS"} 
     into (/Orders/Document/Comments[1])[1] 
    ') 
    where id = @id; 

如果希望插入從SQL可變文本,下面的結構可用於:

declare @comments varchar(1000); 
set @comments = 'NO COMMENTS'; 

update @t1 
set userdef.modify(' 
    insert text {sql:variable("@comments")} 
    into (/Orders/Document/Comments[1])[1] 
') 
where id = @id; 
+0

什麼如果我想在INSERT語句中插入一個變量? http://stackoverflow.com/questions/32253235/how-to-use-if-else-statement-to-update-or-create-new-xml-node-entry-in-sql謝謝。 – Si8

+0

謝謝。你是一個拯救生命的人。 – Si8