Dynamically replacing the value of a node in XML DML(动态替换 XML DML 中节点的值)
本文介绍了动态替换 XML DML 中节点的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我现在正在为此苦苦挣扎:如何替换文本等于某个变量值的无类型 XML 列中的节点值?可能吗?
I am struggling with this now: How do you replace the value of a node in an untyped XML column where the text is equal to a certain variable value? Is it possible?
我的 XML:
<attrs>
<attr>ManualInsert</attr>
<attr>ManualInsert2</attr>
<attr>ManualInsert4</attr>
<attr>ManualInsert8</attr>
</attrs>
我的尝试:
DECLARE @OldValue Varchar(255) = 'ManualInsert'
DECLARE @NewValue Varchar(255) = 'ReplacedValue'
UPDATE
Labels
SET
Attributes.modify('replace value of (/attrs/attr/text())[1]
with
if ((/attrs/attr/text() = sql:variable("@OldValue")))
then sql:variable("@NewValue")
else () ')
WHERE
Id = 2000046
消息:(0 行受影响)
DECLARE @OldValue Varchar(255) = 'ManualInsert'
DECLARE @NewValue Varchar(255) = 'ReplacedValue'
UPDATE
Labels
SET
Attributes.modify('replace value of (/attrs/attr[text() = sql:variable("@OldValue")])[1]
with sql:variable("@NewValue")')
WHERE
Id = 2000046
留言:
Msg 2356, Level 16, State 1, Line 7
XQuery [Labels.Attributes.modify()]: The target of 'replace value of' must be a non-metadata attribute or an element with simple typed content, found 'element(attr,xdt:untyped) ?'
预期结果:
<attrs>
<attr>ReplacedValue</attr>
<attr>ManualInsert2</attr>
<attr>ManualInsert4</attr>
<attr>ManualInsert8</attr>
</attrs>
推荐答案
modify('replace value of (/attrs/attr[. = sql:variable("@OldValue")]/text())[1]
with sql:variable("@NewValue")')
您的第二次尝试实际上只是缺少指定应该替换的是 text() .这也可以.
Your second attempt is actually just missing to specify that it is the text() that should be replaced. This will also work.
modify('replace value of (/attrs/attr[text() = sql:variable("@OldValue")]/text())[1]
with sql:variable("@NewValue")')
这篇关于动态替换 XML DML 中节点的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:动态替换 XML DML 中节点的值
基础教程推荐
猜你喜欢
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- oracle区分大小写的原因? 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 在多列上分布任意行 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
