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

标签 sql xml sql-server-2008 tsql

我有一个名为 XMLData 的列,其中包含大型 XML(大约 10,000 行)。 下面是存储的 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查询中删除多个节点?具体来说,我想删除节点 DEF 下的所有 GHI 节点。谢谢!!

最佳答案

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

关于sql - 如何使用 SQL 删除 XML 中的多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31560397/

相关文章:

php - 从 SQL 中检索数据以显示为 XML

sql - 我可以避免在这里使用游标吗?

asp.net - 在 SQL Server 中仅获取 float 中的小数部分

sql-server - 如何在 SQL Server 2008 Express 中安装企业管理器?

python - SQL在特定列中插入多个数据(python)

mysql - 将行转换为列的查询

mysql - 使用 sql if else 对表中的数据进行匿名化更简单

java - 如何继续检查 EditText 是否为空(如果启用空按钮,否则禁用): android/java

mysql - 将两个值组合成一个字段

android - 在 API 26 之前的设备上使用 XML 属性 paddingHorizo​​ntal?