如何从SQL Server中的多个XML文件读取数据?

baka1408

背景 :

我想从多个XML文件(存储在数据库中)中获取数据,并将其提取到一个结果集中。具有单个XML文件的基本工作解决方案看起来与此类似:

DECLARE @xml xml
SET @xml = 
(SELECT TOP 1 convert(varchar(max), convert(varbinary(max), [XML_FILE]))
  FROM [SOME_TABLE])
SELECT
    b.value('(./SomeNode/text())[1]','nvarchar(100)')) as [Some_Text],
    b.value('(./SomeOtherNode/@VAL)[1]','int')) as [Some_Val]
FROM @xml.nodes('Example/File') as a(b)

显然,这不适用于返回许多行(许多XML文件)的SELECT。次优解决方案可以使用游标来实现(遍历集合->将数据推送到临时表中-> SELECT(*)from secondary_table),但是,我认为这不是必需的,并且可以实现更直接的解决方案。

题 :

如何在不使用游标的情况下,将通过SELECT查询获得的多个XML文件中的数据提取到单个结果集中?

FILE_NAME ||   Value 1   ||   Value 2  || ...
----------------------------------------------
XML_FILE_1 || Node1Value || Node2Value || ...
XML_FILE_2 || Node1Value || Node2Value || ...
Shnugo

可以肯定的CURSOR是,这种方法是不需要的,完全是错误的...

一般的方法应该是这样的:

SELECT
    b.value('(./SomeNode/text())[1]','nvarchar(100)') as [Some_Text],
    b.value('(./SomeOtherNode/@VAL)[1]','int') as [Some_Val]
FROM [SOME_TABLE]
CROSS APPLY [XML_FILE].nodes('Example/File') as a(b);

但是还有很多问题:

  • 谈论xml文件有点令人困惑。我希望正确理解这一点,因为所有这些XML都位于表的列中。
  • 如果第一个是正确的:所有这些XML是否都具有相同的结构?如果没有,您将需要某种过滤。
  • 表列中的XML是否已经是本机XML类型?您的示例CONVERT广泛使用...您将需要本机XML才能使用.nodes()
  • 如果没有本机XML:您是否必须处理无效/不可广播的数据?
  • 是否有没有数据的行,但是您仍然想查看它们?在这种情况下,您可以尝试OUTER APPLY代替CROSS APPLY

为了演示运行的独立模型:

DECLARE @mockup TABLE(ID INT IDENTITY, [XML_FILE] XML);
INSERT INTO @mockup VALUES('<Example><File><SomeNode>blah</SomeNode><SomeOtherNode VAL="1"/></File></Example>')
                         ,('<Example><File><SomeNode>blub</SomeNode><SomeOtherNode VAL="2"/></File></Example>')

SELECT
    ID,
    b.value('(SomeNode/text())[1]','nvarchar(100)') as [Some_Text],
    b.value('(SomeOtherNode/@VAL)[1]','int') as [Some_Val]
FROM @mockup
CROSS APPLY [XML_FILE].nodes('Example/File') as a(b)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在SQL Server中从没有标签的xml文件中读取xml数据?

在SQL Server中读取XML数据

在SQL Server中读取xml文件

如何从python中的xml文件读取数据

如何在 SQL Server 中读取 xml?

SQL Server:读取XML数据

如何在 Java 中读取多个 XML 文件?

如何在PHP中读取多个CSV文件数据

如何读取多个CSV文件以Java中的数据排序?

如何在SQL Server中读取格式化的xml文件

如何在 SQL Server 中读取 XML 重复节点

如何在SQL Server 2008中读取XML列?

如何在sql server中读取此xml

如何选择使用XML数据类型存储在SQL Server中的前5个读取XML文档?

如何从xml文件读取多个属性

如何从 sql server 表导出到 Azure 数据工厂中的多个 csv 文件

如何循环读取多个Excel数据文件并处理每个文件中的数据?

如何将多个目录中的多个.parquet文件读取到单个pandas数据框中?

SQL Server:如何从文件中读取变量值

如何从赛普拉斯的 .sql 文件中读取数据?

从xml文件T-sql读取数据

如何从多个文件中读取数据并将其存储在另一个文件中

将 XML 文件插入 SQL Server 中的数据库

如何使用php从XML文件读取数据

如何在文件选择中读取(图像数据/尺寸/文件大小/名称)多个图像?

如何从 SQL Server 中的 XML 列中获取数据?

如何从SQL Server读取JSON数据?

如何将多个文本文件读取到pyspark中的数据框中

Android:如何为数据容器创建基于XML的文件,从文件中读取/添加内容