如何使用SQL删除XML中的多个节点

时间:2015-07-22 10:23:08

标签: sql xml sql-server-2008 tsql

我有一个包含大型XML(大约10,000行)的列名XMLData。 以下是存储的XML类型。

<ABC>
  <DEF>
    <GHI>
      <JKL>value1</JKL>
      ..
    </GHI>
    <GHI>
      <JKL>value2</JKL>
      ..
    </GHI>
    <GHI>
      <JKL>value3</JKL>
      ..
    </GHI>
    ..
    ..
    <GHI>
      <JKL>valueN</JKL>
      ..
    </GHI>
    <OtherNodes>
    <OtherNodes1>
    .
    .
    .
  </DEF>
</ABC>

有没有办法在SQL查询中删除多个节点?具体来说,我想删除Node DEF下的所有GHI节点。谢谢!

1 个答案:

答案 0 :(得分:2)

对于SQL Server,您只需将modifydelete一起使用:

declare @x xml = '<ABC>
  <DEF>
    <GHI>
      <JKL>value1</JKL>
    </GHI>
    <GHI>
      <JKL>value2</JKL>
    </GHI>
    <GHI>
      <JKL>value3</JKL>
    </GHI>
    <GHI>
      <JKL>valueN</JKL>
    </GHI>
    <OtherNodes/>
    <OtherNodes1/>
  </DEF>
</ABC>'

set @x.modify('delete /ABC/DEF/GHI')

select @x

结果:

<ABC><DEF><OtherNodes /><OtherNodes1 /></DEF></ABC>