Самый простой способ редактировать одну запись в столбце XML?

9

Как я понимаю, MS SQL Server Management Studio не позволяет напрямую редактировать / заменять записи в столбцах XML через графический интерфейс (копирование / вставка не работает и т. Д.).

Какой самый простой вариант заменить одну запись в столбце XML? Нужно ли использовать что-то отличное от UPDATE / REPLACE для значения столбца XML?

Михаил
источник

Ответы:

22

Если вам просто нужно заменить весь кусок XML за один раз, тогда вы можете сделать обычное ОБНОВЛЕНИЕ, например, что-то вроде этого:

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

Если вам нужно отредактировать отдельные атрибуты или элементы, вы можете использовать метод .modify типа данных XML в SQL Server для обновления отдельных значений. Вот простой пример для начала:

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

Если вам нужна дополнительная помощь, опубликуйте небольшой образец вашего XML и ожидаемые результаты.

wBob
источник