Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete multiple nodes in XML using SQL

I have a column name XMLData which contain large XML (around 10,000 lines). Below is the type of XML stored.

<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>

Is there a way to delete multiple nodes in SQL query? Specifically, I want to delete all GHI nodes under the Node DEF. Thanks!!

like image 407
Piyush Goyal Avatar asked Jun 21 '26 12:06

Piyush Goyal


1 Answers

For SQL Server, you'd just use modify with delete:

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

Result:

<ABC><DEF><OtherNodes /><OtherNodes1 /></DEF></ABC>
like image 66
Damien_The_Unbeliever Avatar answered Jun 23 '26 03:06

Damien_The_Unbeliever