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