gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:04:09 26 4
gpt4 key购买 nike

这就是我正在做的。我将一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com