2012-03-27 3 views
7

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

Пример 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/'')]) ') 

ответ

5

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

Что-то вроде

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

Большое спасибо Джеймс! Это немного более «рискованный», не зная, в каком узле происходит замещение, но он отлично работает для меня. Thanx! – Kberg

 Смежные вопросы

  • Нет связанных вопросов^_^