Обновление подстроки в столбце XML SQL Server 2008 - PullRequest
8 голосов
/ 27 марта 2012

Я хочу выполнить обновление для всех строк в столбце XML в SQL Server 2008, заменив только подстроку в определенном узле xml. Я новичок в XML DML / XQuery и все такое, и я просто не могу понять, как это сделать.

Пример XML в столбце, который я хочу обновить:

<d>
  <p n="Richedit01" t="System.String">
    <v>
      &lt;p&gt; &lt;img border="0" alt="Football4" src="/$-1/football4.jpg" /&gt; &lt;/p&gt;
    </v>
  </p>
</d>  

Я хочу заменить все вхождения подстроки 'src = "/ $ - 1 /' на 'src =" / $ - 1 / file /' во всех строках.

Попробовал это, но, видимо, я не могу использовать функцию замены XPath, например:

UPDATE Translation
SET ContentData.modify('replace value of (d/p[@t=''System.String'']/v)[1] with (d/p[@t=''System.String'']/v[replace(.,''src="/$-1/'',''src="/$-1/file/'')]) ') 

1 Ответ

7 голосов
/ 27 марта 2012

Я думаю, что самым простым решением является преобразование в другой тип данных, который может принимать замену (например, nvarchar (MAX)).Используйте функцию REPLACE, а затем преобразуйте ее обратно в XML

Что-то вроде

UPDATE Translation SET
ContentData = CAST(REPLACE(CAST(ContentData AS NVARCHAR(MAX)), '/$-1/','/$-1/file/') AS XML)
...