2012-03-27 49 views
7

我想對SQL Server 2008中XML列中的所有行執行更新,只替換某個xml節點中的子字符串。我是XML DML/XQuery的新手,所有這些我都無法弄清楚如何去做。在列XML的更新XML列中的子字符串SQL Server 2008

例子我想更新:

<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)例如)。用替換功能,然後將其轉換回XML

喜歡的東西

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

非常感謝詹姆斯! 這是一個多一點「風險」不知道替換髮生在哪個節點,但它對我來說工作正常。感謝名單! – Kberg 2012-03-27 09:16:03