Le moyen le plus simple de modifier une seule entrée dans une colonne XML?

9

Si je comprends bien, MS SQL Server Management Studio ne permet pas de modifier / remplacer directement les entrées dans les colonnes XML via l'interface graphique (le copier / coller ne fonctionne pas, etc.).

Quelle est l'option la plus simple pour remplacer une seule entrée dans une colonne XML? Dois-je utiliser quelque chose de différent de UPDATE / REPLACE pour une valeur de colonne XML?

Mikhail
la source

Réponses:

22

Si vous avez juste besoin de remplacer le morceau entier de XML en une seule fois, alors vous pouvez faire une MISE À JOUR normale, par exemple quelque chose comme ceci:

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

Si vous devez modifier des attributs ou des éléments individuels, vous pouvez utiliser la méthode .modify du type de données XML dans SQL Server pour mettre à jour des valeurs uniques. Voici un exemple simple pour vous aider à démarrer:

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 vous avez besoin de plus d'aide, veuillez publier un petit échantillon de votre XML et vos résultats attendus.

wBob
la source