Einfachste Möglichkeit, einen einzelnen Eintrag in einer XML-Spalte zu bearbeiten?

9

Soweit ich weiß, erlaubt MS SQL Server Management Studio das direkte Bearbeiten / Ersetzen von Einträgen in XML-Spalten über die GUI nicht (Kopieren / Einfügen funktioniert nicht usw.).

Was ist die einfachste Option, um einen einzelnen Eintrag in einer XML-Spalte zu ersetzen? Muss ich für einen XML-Spaltenwert etwas anderes als UPDATE / REPLACE verwenden?

Mikhail
quelle

Antworten:

22

Wenn Sie nur das gesamte XML-Element auf einmal ersetzen müssen, können Sie ein normales UPDATE durchführen, z. B. so etwas:

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

Wenn Sie einzelne Attribute oder Elemente bearbeiten müssen, können Sie die .modify-Methode des XML-Datentyps in SQL Server verwenden, um einzelne Werte zu aktualisieren. Hier ist ein einfaches Beispiel, um Ihnen den Einstieg zu erleichtern:

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

Wenn Sie weitere Hilfe benötigen, veröffentlichen Sie bitte ein kleines Beispiel Ihres XML und Ihrer erwarteten Ergebnisse.

wBob
quelle