Maneira mais simples de editar entrada única na coluna XML?

9

Pelo que entendi, o MS SQL Server Management Studio não permite editar / substituir diretamente entradas em colunas XML via GUI (copiar / colar não funciona etc.).

Qual é a opção mais fácil de substituir uma única entrada em uma coluna XML? Preciso usar algo diferente de UPDATE / REPLACE para um valor de coluna XML?

Mikhail
fonte

Respostas:

22

Se você apenas precisar substituir todo o XML de uma só vez, poderá fazer uma atualização normal, por exemplo, algo como isto:

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

Se você precisar editar atributos ou elementos individuais, poderá usar o método .modify do tipo de dados XML no SQL Server para atualizar valores únicos. Aqui está um exemplo simples para você começar:

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

Se precisar de mais ajuda, publique uma pequena amostra do seu XML e dos resultados esperados.

wBob
fonte