2012-03-27 24 views
7

Deseo realizar una actualización en todas las filas de una columna XML en SQL Server 2008, reemplazando solo una subcadena en un determinado nodo xml. Soy nuevo en XML DML/XQuery y todo eso y simplemente no puedo encontrar la manera de hacerlo.Subcadena de actualización en columna XML SQL Server 2008

Ejemplo de XML en la columna Quiero actualizar:

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

quiero reemplazar todas las apariciones de la subcadena 'src = "/ $ - 1 /' con" src = "/ $ - 1/archivo/'en todas las filas.

intentado esto pero al parecer no hay manera de que pueda utilizar el XPath reemplazar la función de esta manera:

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

Respuesta

5

creo que la solución más fácil es convertir a otro tipo de datos que puede aceptar sustituir (nvarchar (max) por ejemplo). Utilice la función REPLACE, y luego convertirlo de nuevo a XML

Algo así como

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

Muchas gracias James! Es un poco más "arriesgado" no saber en qué nodo se produce el reemplazo, pero funciona bien para mí. Gracias! – Kberg

Cuestiones relacionadas