Как обновить значение узла xml на основе другого значения узла в SQL Server - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующие сотрудники XML в таблице «Тест»

<employees>
   <employee>
     <id>1</id>
     <name>John doe 1</name>
   </employee>
   <employee>
     <id>2</id>
     <name>John doe 2</name>
   </employee>
   <employee>
     <id>3</id>
     <name>John doe 3</name>
   </employee>
</employees>

Мне нужно обновить имя сотрудника с идентификатором 3. Я обновляю следующим образом.

update Test
set employeesXML.modify('replace value of (/employees/employee/name/text())[1]
with "xyz"')
where employeesXML.exist(N'/employees/employee/id[text()="3"]')

Он обновляет имя сотрудника с идентификатором 1, но если я не укажу индекс узла, он выдаст ошибку.

Как заменить значение узла на основезначение другого узла?

1 Ответ

0 голосов
/ 18 сентября 2018

Чтобы выбрать узел с идентификатором, используйте следующее:

DECLARE @xml xml = '<employees>
   <employee>
     <id>1</id>
     <name>John doe 1</name>
   </employee>
   <employee>
     <id>2</id>
     <name>John doe 2</name>
   </employee>
   <employee>
     <id>3</id>
     <name>John doe 3</name>
   </employee>
</employees>'

SELECT @xml.value('(//employee[id=3]/name)[1]', 'nvarchar(max)')

Чтобы изменить, используйте:

SET @xml.modify('replace value of (//employee[id=3]/name/text())[1] with "xyz"')
...