开发者社区 问答 正文

无法在路径中使用<xsi:type =>设置SQL XML节点级别

我正在尝试使用下面的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

展开
收起
祖安文状元 2020-01-05 14:43:12 468 分享 版权
阿里云 AI 助理回答

在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子元素的文本内容。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答