如何使用XML列上的modify replace填充空XML节点?

时间:2013-07-30 16:45:43

标签: tsql sql-server-2005 sql-update xquery sqlxml

这是我的xml存储在名为UserDef

的XML类型列中
<Orders>
  <Document>
    <DocumentID>abc123</DocumentID>
    <ActualShipDate />
    <Comments/>
  </Document>
  <Document>
 ....
 ...
  </Document>
</Orders>

我正在尝试使用以下内容填充Comments元素:

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完全填充。我应该采取哪些不同的方式来实现这一目标?

1 个答案:

答案 0 :(得分: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;