Najprostszy sposób edycji pojedynczego wpisu w kolumnie XML?

9

Jak rozumiem, MS SQL Server Management Studio nie zezwala na bezpośrednią edycję / zastępowanie wpisów w kolumnach XML przez GUI (kopiowanie / wklejanie nie działa itp.).

Jaka jest najłatwiejsza opcja zastąpienia pojedynczego wpisu w kolumnie XML? Czy muszę użyć czegoś innego niż UPDATE / REPLACE dla wartości kolumny XML?

Michaił
źródło

Odpowiedzi:

22

Jeśli potrzebujesz tylko raz zastąpić cały fragment XML, możesz wykonać normalną AKTUALIZACJĘ, np. Coś takiego:

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

Jeśli musisz edytować poszczególne atrybuty lub elementy, możesz użyć metody .modify typu danych XML w programie SQL Server, aby zaktualizować pojedyncze wartości. Oto prosty przykład na początek:

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

Jeśli potrzebujesz dodatkowej pomocy, opublikuj małą próbkę swojego XML i oczekiwanych wyników.

wBob
źródło