Изменение значения узла xml в SQL с помощью xquery [SQL Server] - PullRequest
0 голосов
/ 14 марта 2011

У меня есть пример XML в одном из столбцов таблицы:

<Root>
   <A>
      <C>c</C>
      <D>d</D>
   </A>
   <B>b</B>
</Root>

Как заменить значение узла A на что-то подобное:

<Root>
   <A>
      <E>e</E>
      <F>f</F>
   </A>
   <B>b</B>
</Root>

Я попробовал следующее решение

DECLARE @var varchar(100);
SET @var = '<E>e</E><F>f</F>'
SET @xml.modify('replace value of (/Root/A/text())[1] with sql:variable("@var")');

но это не сработало ...

1012 * привет *

1 Ответ

1 голос
/ 14 марта 2011

Я не думаю, что можно использовать replace для замены узлов, только значения.Вы можете использовать delete , а затем insert .

declare @xml as xml = '
<Root>
  <A>
    <C>c</C>
    <D>d</D>
  </A>
  <B>b</B>
</Root>'

declare @var xml
set @var = '<E>e</E><F>f</F>'

set @xml.modify('delete /Root/A/*')
set @xml.modify('insert sql:variable("@var") into (/Root/A)[1]')

select @xml
...