【问题标题】:How to delete multiple nodes in XML using SQL如何使用 SQL 删除 XML 中的多个节点
【发布时间】:2015-07-22 10:23:08
【问题描述】:

我有一个列名 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 查询中的多个节点?具体来说,我想删除 Node DEF 下的所有 GHI 节点。谢谢!!

【问题讨论】:

  • 导出、行、修改、xml、更新行可能效率更高。如果您使用的是 SQL Server,我建议您使用 sqlcmd.exe 或 bcp.exe 等命令行可执行文件。见msdn.microsoft.com/en-us/library/ms162816.aspx
  • @jdweng - 你是否有特定的理由避免使用 SQL Server xml 数据类型功能(我总是乐于学习新知识)
  • 在sql外面解析xml比在里面解析xml容易。在外面你可以使用里面没有的其他语言。例如,您可以使用 SHELL 在其他程序中调用命令语言。

标签: sql xml sql-server-2008 tsql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多