sql + xquery删除多个父节点

时间:2013-03-18 17:13:26

标签: sql sql-server-2008 xpath xquery

在下面的xml中我有三个5 / Item元素,其中4个有一个Blob子元素。我想删除具有子Blob元素的元素,但只删除Item / @ Name中包含文本“Blob”的元素。

<Items>
    <Item Name="Blob123">
        <Blob/>
    </Item>
    <Item Name="Blob124">
        <Blob/>
    </Item>
    <Item Name="Blob125">
        <Blob/>
    </Item>
    <Item Name="Blob126">
    </Item>
    <Item Name="Xyz126">
        <Blob/>
    </Item>
</Items>

此查询返回名为“Blob%”的3 / Item元素,并且使用child / Blob元素就可以了。

  select xmlVal.query('(/Items/Item[contains(@Name, "Blob")]/Blob/..)')

但是,当我尝试使用此xquery删除这些元素时:

  select xmlVal.modify('delete (/Items/Item[contains(@Name, "Blob")]/Blob/..)')

我得到:错误地使用XML数据类型方法'modify'。在这种情况下,预计会有一种非变异方法。

我做错了什么。

1 个答案:

答案 0 :(得分:0)

如果它有助于其他人,要解决这个问题,我需要使用更新/设置,还需要稍微更改xpath

更新table1 set xmlVal.modify('delete(/ Items / Item [contains(@Name,“Blob”)] [Blob])')