【发布时间】:2020-02-08 20:42:37
【问题描述】:
我有多个不同结构的 XML 文件,但它们都共享一组特定的节点。
我的目标是只将这些相互节点导入到 SQL Server 表中。 知道我无法为每种类型生成 .Xsd,因为有许多可能的 XML 文件变体,我该如何继续? 提前致谢。
【问题讨论】:
-
我会使用脚本任务加载到 XML 文档中,然后使用 LINQ 进行查询。
标签: sql-server xml ssis etl
我有多个不同结构的 XML 文件,但它们都共享一组特定的节点。
我的目标是只将这些相互节点导入到 SQL Server 表中。 知道我无法为每种类型生成 .Xsd,因为有许多可能的 XML 文件变体,我该如何继续? 提前致谢。
【问题讨论】:
标签: sql-server xml ssis etl
简单的解决方案是将所有这些 XML 文件加载到 XML 表中(2 列:FileId 和 XmlData)。这可以作为软件包的第一步完成。
然后,您将编写一个存储过程,它会将 XML 从此表中分解到您的最终表中。此存储过程将作为 SSIS 包中的第二步调用。
【讨论】:
我认为使用 SSIS 做到这一点并不容易。
如果您没有其他选择,您可以使用脚本组件作为源并使用 C# 或 VB.NET 脚本解析 XML 文件,然后仅生成带有所需列的输出。
更多关于使用Script组件的信息可以参考以下文章:
有一段时间,我一直在从事一个名为 SchemaMapper 的项目。它是一个使用 C# 开发的类库。您可以使用它将 XML 和其他具有不同结构的格式的表格数据导入到统一的 SQL Server 表中。
您可以参考项目 wiki 以获取分步指南:
另外,请随时查看以下答案,它可能会给您一些见解:
【讨论】:
所以我为解决这个特殊情况所做的是: 1-添加一个读取 xml 文件并仅保留公共节点并将它们的值保存到我的 dts 变量的 C# 脚本。 2-将我刚刚填充的变量插入到我的 SQL Server 表中。 这两个任务都在一个 for each 循环中,以遍历特定目录中的所有 xml 文件。 希望对您有所帮助!
【讨论】: