Básicamente tengo una columna xml, y necesito encontrar y reemplazar un valor de etiqueta en cada registro.¿Puedo hacer una búsqueda/reemplazo en t-sql?
Respuesta
Para nada real, me gustaría ir con XPaths, pero a veces sólo necesito una solución rápida y sucia:
Puede utilizar CAST para convertir esa columna XML en un varchar regular, y luego hacer tu reemplazo normal.
UPDATE xmlTable SET xmlCol = REPLACE(CAST(xmlCol as varchar(max)), '[search]', '[replace]')
Esa misma técnica también hace que la búsqueda XML fácil cuando se necesita simplemente ejecutar una consulta rápida de encontrar algo, y no quiere tratar con XPaths.
SELECT * FROM xmlTable WHERE CAST(xmlCol as varchar(max)) LIKE '%found it!%'
Editar: Sólo desea actualizar esto un poco, si recibe un mensaje en la línea de conversión de uno o más caracteres de XML para dirigirse a colación imposible, a continuación, sólo tiene que utilizar nvarchar que admite unicode.
CAST(xmlCol as nvarchar(max))
Para buscar un contenido en una columna XML, busque en el método existir(), como se describe en MSDN here.
SELECT * FROM Table
WHERE XMLColumn.exist('/Root/MyElement') = 1
... para reemplazar, utilice el método de modificación(), como se describe here.
SET XMLColumn.modify('
replace value of (/Root/MyElement/text())[1]
with "new value"
')
.all asumiendo SqlServer 2005 o 2008. Esto se basa en XPath, que usted necesita saber.
update my_table
set xml_column = replace(xml_column, "old value", "new value")
"Argumento tipo de datos XML no es válido para el argumento 1 de reemplazar fuction" –
- 1. ¿Cómo puedo optimizar/refactorizar una cláusula TSQL "ME GUSTA"?
- 2. ¿Es posible definir una función local en una consulta TSQL?
- 3. ¿Cómo optimizar una consulta TSQL?
- 4. ¿Simular enumeraciones en TSQL?
- 5. Transacciones anidadas en TSQL
- 6. TSQL - Caso - ¿Valores en?
- 7. TSQL - Suma una consulta de unión
- 8. tsql: ¿es posible hacer declaraciones de casos anidados en una selección?
- 9. Cómo hacer el equivalente de un 'Tsql seleccionar a', en una tabla existente
- 10. Función dentro de una función TSQL
- 11. TSQL: actualizar una columna como null
- 12. TSQL Conde 'Dónde' Condición
- 13. transacción tsql
- 14. TSQL - ISNULL en varias columnas
- 15. ¿Puedo hacer una MERGE atómica en Oracle?
- 16. TSQL - Desactivar disparadores en transacciones
- 17. pruebas unitarias TSQL
- 18. ¿Cómo creo condicionalmente una tabla en Sybase (TSQL)?
- 19. Seleccionar de la unión tsql
- 20. TSQL escritura en una tabla temporal de SQL dinámico
- 21. Consultas relacionadas con ISNULL en TSQL
- 22. ¿Qué hace "%% DatabaseEx" en TSQL?
- 23. TSQL Complejo Merge
- 24. ¿Hay alguna manera de hacer que una variable TSQL sea constante?
- 25. ¿Inconsistencia de TSQL Round()?
- 26. TSQL: ¿cómo ejecutar una consulta como una variable?
- 27. TSQL: Try-Catch Transacción en Gatillo
- 28. TSQL FOR XML EXPLICIT
- 29. ¿Cómo puedo hacer una instrucción de actualización en una condición
- 30. Cómo crear vistas actualizables en TSQL
ja, eso es un pequeño programa brillante :-) –
@ Cory-Mawhorter Usted ha mencionado XPath sería "mejor". ¿Cómo usaría XPath para cambiar algo en la columna XML? –
@ArminderDahul Ha pasado un tiempo, pero creo que puedes hacerlo como 'set xmlCol.nodes ('/ somenode/someothernode [@ id = sql: variable (" @ somevar ")]/text') = 'blah'' . No es seguro. La respuesta de Michael puede ayudarte a comenzar. –