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 置換関数を使用する方法はありません。

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 に答える