首页 > 解决方案 > 如何从 SQL 中的 XML 变量中删除包含多个属性的节点

问题描述

我有一些 XML 被传递到如下所示的 SQL 存储过程中:

<root>
    <category>
        <property id="blah" otherID="blahblah" year="2015">
        <property id="blah" otherID="notBlahBlah" year="2015">
    </category>
</root>

我想使用基于多个节点属性的 SQL 从中删除一个属性节点。例如,假设我想删除 id="blah" 和 otherID="blahblah" 的属性。我怎么能这样做?谢谢你。

这是我迄今为止根据阅读一些 XQUERY 文档对如何执行此操作的最佳猜测得出的代码,但它无法正常工作:

DECLARE @XML AS XML
SET @XML = '<root>
               <category>
                   <property id="blah" otherID="blahblah" year="2015">
                   <property id="blah" otherID="notBlahBlah" year="2015">
               </category>
            </root>'

UPDATE @XML.nodes('/root/category/property') 
SET data.modify('delete /root/category/property[id="blah", otherID="blahblah"]')    

标签: sqlsql-serverxmlxquery

解决方案


DECLARE @XML AS XML

SET @XML = '
<root>
               <category>
                   <property id="blah" otherID="blahblah" year="2015"/>
                   <property id="blah" otherID="notblahblah" year="2015"/>
               </category>
            </root>'

SET @XML.modify('delete /root/category/property[@id="blah" and @otherID="blahblah"]')

SELECT @XML

推荐阅读