如何基于SQL Server中的另一个节点值更新xml节点值

时间:2018-09-18 10:44:23

标签: sql sql-server xml xpath xml-dml

我在“测试”表中有以下员工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的员工姓名,但是如果我不指定节点索引,则会引发错误。

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

1 个答案:

答案 0 :(得分:1)

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

mysqli_stmt_bind_param($stmt, "sss", $param_term, $param_term, $param_term);

要修改,请使用:

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)')