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?

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.