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

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/'的所有出现替换为'src="/$-1/file/'。

尝试过这个,但显然我无法像这样使用XPath replace函数:

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个回答

11

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

类似于以下内容:

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

非常感谢你,詹姆斯!不知道替换发生在哪个节点上可能会有点更“冒险”,但对我来说它很好用。谢谢! - Kberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接