更新XML列SQL Server 2008中的子字符串

Kbe*_*erg 8 sql-server xquery sql-server-2008 xquery-sql

我想对SQL Server 2008中的XML列中的所有行执行更新,仅替换某个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>  
Run Code Online (Sandbox Code Playgroud)

我想在所有行中替换子串'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/'')]) ') 
Run Code Online (Sandbox Code Playgroud)

小智 7

我认为最简单的解决方案是转换为另一种可以接受替换的数据类型(例如nvarchar(MAX)).使用REPLACE函数,然后将其转换回XML

就像是

UPDATE Translation SET
ContentData = CAST(REPLACE(CAST(ContentData AS NVARCHAR(MAX)), '/$-1/','/$-1/file/') AS XML)
Run Code Online (Sandbox Code Playgroud)