基于其他节点属性值使用SQL XML DML删除指定节点
使用SQL XML DML有条件删除节点的解决方案
嘿,这事儿不难搞定!咱们要做的就是精准定位那些包含<Size Value="S"/>的<Child>节点,然后删掉它下面对应的<Color>节点。下面给你一步步来的具体操作:
1. 针对表中XML列的操作示例
假设你有一张存储该XML数据的表,比如叫ProductData,里面有个XML类型的列ProductXml,可以用UPDATE配合.modify()方法完成删除:
UPDATE ProductData SET ProductXml.modify(' delete /root/ParentGroup/ChildGroup/Child[Size/@Value="S"]/Color ')
2. 变量XML的测试示例
如果只是想先在变量里验证效果,你可以这么写:
-- 声明并初始化XML变量 DECLARE @xml XML = ' <root> <ParentGroup> <ChildGroup Id="1"> <Child Id="1"> <Color Value="Red"/> <Size Value="L"/> </Child> <Child Id="2"> <Color Value="Blue"/> <Size Value="S"/> </Child> <Child Id="3"> <Color Value="Green"/> <Size Value="S"/> </Child> </ChildGroup> </ParentGroup> </root>' -- 执行删除操作 SET @xml.modify(' delete /root/ParentGroup/ChildGroup/Child[Size/@Value="S"]/Color ') -- 查看处理后的XML结果 SELECT @xml AS ProcessedXML
3. 代码逻辑拆解
咱们把delete语句里的XPath路径解释清楚:
/root/ParentGroup/ChildGroup/Child:先定位到所有的<Child>节点[Size/@Value="S"]:这是过滤条件,只保留那些子节点包含<Size Value="S"/>的<Child>/Color:指定要删除的目标——就是符合条件的<Child>节点下的<Color>节点
执行完之后,你会发现Id为2、3的<Child>里的<Color>都被删掉了,而Id为1的<Child>因为Size是"L",对应的<Color>会被保留下来。
内容的提问来源于stack exchange,提问作者silverbullettruck2001
相关产品推荐
相关产品推荐

