我正在尝试使用下面的SQL更新语句修改XML数据类型字段。我在设置正确的路径/Operand xsi:type="QueryObjectKey"/以到达/Name/现场时遇到麻烦。我可以/GroupBegin/false/GroupBegin/毫无问题地设置修改父字段/值的路径,所以我知道SQL语句是正确的,只是要达到的路径语法/Name/不正确。
我收到这个模棱两可的错误消息
消息2205,级别16,状态1,第6行 XQuery [ACVSCore.Access.Query.XMLEncodedCriteria.modify()]:“)”。
如何设置该路径以包含/ Operand xsi:type =“ QueryObjectKey” /
DECLARE @NewValue Varchar(255) = 'None'
update
[ACVSCore].[Access].[Query]
SET
XMLEncodedCriteria.modify('replace value of
```js
(/QueryExpression/Criteria/CriteriaExpression/Operand xsi:type="QueryObjectKey"/Index/text())[1] with sql:variable("@NewValue")') false ORIGINAL
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在SQL Server中,当你需要更新XML数据类型字段中的特定节点时,路径表达式必须符合XQuery的标准。你提到的错误可能是因为路径语法不正确地包含了属性筛选条件。在XQuery中,属性筛选应该用@
符号并且放在元素名称之后。因此,正确的路径表达式来定位到具有特定属性的Operand元素应该是这样的:
DECLARE @NewValue VARCHAR(255) = 'None';
UPDATE [ACVSCore].[Access].[Query]
SET XMLEncodedCriteria.modify('replace value of
(/QueryExpression/Criteria/CriteriaExpression/Operand[@xsi:type="QueryObjectKey"]/Index/text())[1]
with sql:variable("@NewValue")')
在这个修改后的语句中,我将你的路径调整为使用Operand[@xsi:type="QueryObjectKey"]
来精确指向具有属性xsi:type="QueryObjectKey"
的Operand元素。这样应该能解决你的问题,前提是XML文档中确实有这样一个带有指定属性的元素,并且你想要更新的是它的/Index子元素的文本内容。