首页 > 解决方案 > 使用 SSIS 将具有不同列数的文件加载到同一个表中

问题描述

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

合同_ID | 个人ID | 聘用日期 | 合同工期小时数 | 经理_ID

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

合同_ID | 个人ID | 聘用日期 | 每周小时数 | 经理_ID

目标表包含所有列。

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

标签: sql-serverssisoledbflat-file

解决方案


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

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

设计一个数据流来完成一项任务——这个加载兼职员工,这个加载临时员工,这个加载全职员工。可能感觉需要更多的工作,但尝试任何聪明的东西都可能是调试的噩梦。

噩梦般的接近

SSIS任务不一致的列计数导入?

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

我将此归类为噩梦般的方法,因为虽然它有效,但如果这是您第一次涉足 SSIS,则此解决方案包含许多先进技术。


推荐阅读