9

我想对 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>  

我想在所有行中用 'src="/$-1/file/' 替换所有出现的子字符串 'src="/$-1/' 。

试过了,但显然我无法像这样使用 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/'')]) ') 
4

1 回答 1

9

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

就像是

UPDATE Translation SET
ContentData = CAST(REPLACE(CAST(ContentData AS NVARCHAR(MAX)), '/$-1/','/$-1/file/') AS XML)
于 2012-03-27T07:30:27.863 回答