2012-03-27 40 views
7

Tôi muốn thực hiện cập nhật trên tất cả các hàng trong cột XML trong SQL Server 2008, thay thế chỉ một chuỗi con trong một nút xml nhất định. Tôi mới sử dụng XML DML/XQuery và tất cả những điều đó và tôi không thể tìm ra cách để làm điều đó.Cập nhật chuỗi con trong cột XML SQL Server 2008

Ví dụ về XML trong cột tôi muốn cập nhật:

<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> 

Tôi muốn thay thế tất cả các lần xuất hiện của các chuỗi con 'src = "/ $ - 1 /' với 'src ="/$ - 1/file/'trong tất cả các hàng.

Cố gắng này nhưng dường như không có cách nào mà tôi có thể sử dụng XPath thay thế chức năng như thế này:

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/'')]) ') 

Trả lời

5

Tôi nghĩ rằng giải pháp đơn giản nhất là chuyển đổi sang một kiểu dữ liệu có thể chấp nhận thay thế (nvarchar (MAX) ví dụ). Sử dụng REPLACE chức năng, và sau đó chuyển đổi nó trở lại XML

Something như

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

Thank you very much James! Đó là một chút "nguy hiểm" không biết trong đó nút thay thế xảy ra, nhưng nó hoạt động tốt cho tôi. Thanx! – Kberg

Các vấn đề liên quan