¿La forma más sencilla de editar una sola entrada en una columna XML?

9

Según tengo entendido, MS SQL Server Management Studio no permite editar / reemplazar directamente entradas en columnas XML a través de GUI (copiar / pegar no funciona, etc.).

¿Cuál es la opción más fácil para reemplazar una sola entrada en una columna XML? ¿Tengo que usar algo diferente de ACTUALIZAR / REEMPLAZAR para un valor de columna XML?

Mikhail
fuente

Respuestas:

22

Si solo necesita reemplazar todo el XML en una sola vez, puede hacer una ACTUALIZACIÓN normal, por ejemplo, algo como esto:

UPDATE yourTable
SET yourXML = '<yourNewValidXML/>' 
WHERE rowId = 1

Si necesita editar atributos o elementos individuales, puede usar el método .modify del tipo de datos XML en SQL Server para actualizar valores individuales. Aquí hay un ejemplo simple para comenzar:

DECLARE @t TABLE ( rowId INT IDENTITY PRIMARY KEY, yourXML XML )

INSERT INTO @t ( yourXML )
VALUES ( '<Users>
    <User Name="Bob"></User>
    <User Name="Mikhail"></User>
    <User Name="John"></User>
    <User Name="Sue"></User>
</Users>' )

SELECT 'before' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

-- Update one attribute
UPDATE @t
SET yourXML.modify('replace value of (Users/User/@Name[.="Bob"])[1] with "wBob"')
WHERE rowId = 1

SELECT 'after' s, DATALENGTH(yourXML) dl, yourXML
FROM @t
WHERE rowId = 1

Si necesita más ayuda, publique una pequeña muestra de su XML y sus resultados esperados.

wBob
fuente