Как заполнить пустой XML-узел, используя изменение замены в столбце XML?

Это мой xml, хранящийся в столбце типа XML с именем UserDef

<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 заполнялось. Что я должен сделать по-другому, чтобы это работало?


person FMFF    schedule 30.07.2013    source источник


Ответы (1)


Элемент <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;
person i-one    schedule 30.07.2013
comment
Что, если я хочу вставить переменную в оператор INSERT? Заголовок stackoverflow.com/questions/32253235/ Спасибо. - person Si8; 27.08.2015
comment
Спасибо. Вы спасатель жизни. - person Si8; 03.09.2015