无法通过<xsi:type>设置SQL XML节点路径修改Name字段
解决SQL Server XML字段修改中含xsi:type属性节点的路径问题
这个报错的原因很明确:你在XQuery路径里处理带命名空间的属性时,写法不符合XQuery的语法规范。直接把xsi:type="QueryObjectKey"跟在Operand节点后面是错误的,而且还没正确声明对应的命名空间。
要解决这个问题,只需要两步调整:
- 首先在XQuery语句开头声明
xsi命名空间,和XML里的命名空间URI保持一致 - 用属性过滤的方括号语法,精准定位带有指定
xsi:type的Operand节点
下面是修正后的完整SQL语句:
DECLARE @NewValue Varchar(255) = 'None' UPDATE [ACVSCore].[Access].[Query] SET XMLEncodedCriteria.modify(' declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; replace value of (/QueryExpression/Criteria/CriteriaExpression/Operand[@xsi:type="QueryObjectKey"]/Name/text())[1] with sql:variable("@NewValue") ')
关键调整说明:
- 命名空间声明:添加
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";,让XQuery能识别xsi前缀对应的命名空间——你的XML里明确定义了这个命名空间,XQuery必须匹配才能正确解析属性。 - 节点路径修正:把原来的
Operand xsi:type="QueryObjectKey"改成Operand[@xsi:type="QueryObjectKey"],这是XQuery里通过属性过滤节点的标准写法,用方括号包裹属性条件就能精准定位目标节点。
这样修改后,就能正确找到<Operand xsi:type="QueryObjectKey">下的<Name>节点,顺利完成值的替换操作。
内容的提问来源于stack exchange,提问作者GForce
相关产品推荐
相关产品推荐

