1

我在“测试”表中有以下员工 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>

我必须更新 id 为 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"]')

它使用 id 1 更新员工姓名,但如果我不指定节点索引,则会引发错误。

如何根据另一个节点的值替换一个节点的值?

4

1 回答 1

1

要选择具有 id 的节点,请使用以下命令:

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"')
于 2018-09-18T10:50:37.300 回答