如何删除SQL表中XML类型列内的指定重复节点
SQL Server XML类型列删除指定节点的正确写法
错误原因
你之前的语句问题出在XPath表达式不符合语法规则:
- 不能直接把节点值写在路径层级中,需要用
[]条件筛选节点内容 - 多了冗余的闭合括号,语法不合法
正确写法
场景1:删除所有值为178.160.245.88的<AllowableIpAddress>节点
UPDATE 你的实际表名 SET 你的XML列名.modify('delete /GodBrandConfig/AllowableIpAddresses/AllowableIpAddress[text()="178.160.245.88"]') WHERE idcolumn = 1125;
场景2:仅删除重复节点、保留1个值为178.160.245.88的节点
如果不需要把所有该值的节点都删掉,只想去重留一个,用以下写法:
UPDATE 你的实际表名 SET 你的XML列名.modify('delete /GodBrandConfig/AllowableIpAddresses/AllowableIpAddress[text()="178.160.245.88"][position() > 1]') WHERE idcolumn = 1125;
语法说明
text()用于获取XML节点的文本内容[]内写节点筛选条件,只有满足条件的节点才会被匹配position() > 1表示匹配到的节点序列中,除了第一个之外的所有节点,实现去重留一的效果
内容的提问来源于stack exchange,提问作者user3482471
相关产品推荐
相关产品推荐

