使用 SSIS 将具有不同列数的文件加载到同一个表中

问题描述

我需要将具有不同列数的 14 个不同文件加载到同一个表中。许多列是相同的,但每个文件都有一些特定于它们的列。每个文件名称表示文件将具有的列。 例如,文件“Temporary_Employees.txt”将始终具有列:

合约 ID | Person_ID |聘用日期 | ContractDurationHours |经理_ID

文件“PartTime_Employees.txt”将包含以下列:

合约 ID | Person_ID |聘用日期 |每周小时数 |经理_ID

目标表包含所有列。

我是 SSIS 的新手,我能想到的唯一解决方案是拥有 14 个数据流和 14 个平面文件连接......有没有更好的方法来做到这一点?

解决方法

您需要为每种独特的文件格式创建一个平面文件连接管理器。

如果有共享格式,FullTime_Employees.txt 和 Management_Employees.txt,那么您可以使用 Foreach 文件枚举器来循环文件(更改连接管理器的连接字符串属性)并让数据流使用更新的连接管理器。

设计一个数据流来完成一项任务——这个任务加载兼职员工,这个加载临时员工,这个加载全职员工。可能感觉需要更多的前期工作,但尝试任何巧妙的方法对于调试来说可能是一场噩梦。

噩梦般的方法

SSIS Task for inconsistent column count import?

如果您不需要在目标中填充“额外”列,您可以使用我在上述旧答案中概述的查询方法。基本上,您将编写一个查询来枚举文件中通用的所有列名。这将产生一组一致的可用元数据,然后您可以使用 foreach 文件枚举器来处理所有文件。

我将其归类为噩梦般的方法,因为虽然它有效,但如果这是您首次涉足 SSIS,则该解决方案融合了许多高级技术。