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>
<p> <img border="0" alt="Football4" src="/$-1/football4.jpg" /> </p>
</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)