У меня есть таблица со столбцом XML,
Я хочу обновить XML, чтобы вставить атрибут или изменить значение атрибута, если атрибут уже существует.
Скажем, начальный xml:
Вставка:
UPDATE Table
set XmlCol.modify('insert attribute att {"1"} into /d[1]')
Изменение:
UPDATE Table
set XmlCol.modify('replace value of /d[1]/@att with "1"')
вставить не удастся, если атрибут уже существует, заменить не удастся, если атрибут не существует.
Я пытался использовать «если», но я не думаю, что это может работать, там я получаю сообщение об ошибке: «XQuery [modify ()]: синтаксическая ошибка рядом с« атрибутом », ожидается« еще ».»
Если попытка
UPDATE Table
set XmlCol.modify('if empty(/d[1]/@att)
then insert attribute att {"1"} into /d[1]
else replace value of /d[1]/@att with "1"')
В настоящее время я выбираю xml в переменную, а затем изменяю его с помощью T-SQL, а затем обновляю столбец новым xml. Это требует от меня блокировки строки в транзакции и, вероятно, дороже для БД.