sql-server - 使用 SQL Server 将 XML 文件分解为单独的行

标签 sql-server xml sql-server-2008 xpath xquery

这就是我正在做的。我将一个 XML 文件插入到一个 XML 列中,连同其他列(例如日期戳等)用于记录(这些与此请求无关)

文件看起来像这样:

<topLevelItem>
  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>
  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>
  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>
<topLevelItem>

我的目标是能够查询 XML 字段并获得每个 <secondLevelItem> 的结果集在它自己的行中,以 XML 形式。如下图:

第 1 行:

  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>

第 2 行:

  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>

第 3 行:

  <secondLevelItem>
    <secondLevelItemDetail>
    </secondLevelItemDetail>
    <secondLevelItemAnotherDetail>
    </secondLevelItemAnotherDetail>
  </secondLevelItem>

这必须使用 Microsoft SQL Server 而不是使用 CLI 来完成。我需要能够声明我希望从哪个 XML 节点开始分解,因为某些文件具有我不需要的其他 XML 元素。所以像,WHERE node = secondLevelItem .

最佳答案

在 SQL Server 2005 和更新版本中,SQL Server 提供了出色的 XQuery 支持。

这里的这种方法将使用 .nodes().query()方法:

SELECT 
    Col.query('.')
FROM 
dbo.YourTable
CROSS APPLY
    YourXmlColumn.nodes('/topLevelItem/secondLevelItem') AS Tbl(Col)
WHERE
    (some condition)

.nodes()函数创建一个“临时的,内联的”伪表 Tbl单列 Col它为 XML 列中与给定的 XPath 匹配的每个节点包含一个 XML 条目(在本例中:<secondLevelItem> 中的每个 <topLevelItem> 将被匹配)。

由于您需要每个 XML 元素的完整 XML,只需使用 .query('.')返回完整的 XML 元素。

关于sql-server - 使用 SQL Server 将 XML 文件分解为单独的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797981/

相关文章:

.net - 在存储过程或客户端代码中循环

sql - 在不破坏脚本和存储过程的情况下重命名列

sql - 我可以清理这个 XML 查询吗?

sql - 在数据库 int 或 char 中保存值的最佳做法是什么?

sql - 加快SQL查询速度

c# - ASP 连接错误 : Incorrect syntax near the keyword 'User

sql-server - 继续获取 'cursor is READ-ONLY'

xml - 使用 JAXB (Moxy) 从 XML 获取列表 <String>

来自 xml 和 SEO 的 jquery append 元素

sql-server-2008 - 与现有主键或 UNIQUE 约束不匹配