You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中如何按PONo条件删除XML变量内的指定子节点

问题原因及解决方法

错误点梳理

  • 根节点名称拼写错误:你的XML根节点是NewData,原代码写为NewDataSet,路径完全不匹配
  • 谓词位置错误:筛选PONo值的谓词应作用于XML节点,而非要删除的BatchNo/ExpiryDate节点,这两个子节点下不存在PONo子节点,永远无法匹配到符合条件的节点
  • 语法格式错误:XQuery表达式的引号闭合位置错误,且sql:variable()内的变量名需要用引号包裹
  • 额外注意:你给出的XML示例中<PONo>的闭合标签误写为</SAPPONo>,属于XML格式错误,需先修正为</PONo>否则XML本身无法正常解析

正确实现代码

-- 方法1:分两次删除对应节点
SET @XML.modify('delete /NewData/XML[PONo = sql:variable("@result")]/BatchNo')
SET @XML.modify('delete /NewData/XML[PONo = sql:variable("@result")]/ExpiryDate')

-- 方法2:单次调用同时删除两个节点,执行效率更高
SET @XML.modify('
  delete /NewData/XML[PONo = sql:variable("@result")]/(BatchNo, ExpiryDate)
')

执行后可通过SELECT @XML验证修改结果,符合条件的XML节点下的BatchNo和ExpiryDate节点会被删除。

内容的提问来源于stack exchange,提问作者Levesque Xylia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:27:02