如何使用单个SSIS包读取不同格式的文件并将数据插入不同的表中?

如何使用单个SSIS包读取不同格式的文件并将数据插入不同的表中?,ssis,Ssis,我需要创建一个SSIS包,从不同格式(列数、不同分隔符、不同列名)的多个文件中读取数据,并插入到不同的表中 例如:我将收到 文件1,文件2…文件10 每个都有不同的格式,我需要插入到不同的表中 表1,表2,…表10 所有这些操作都应该使用单个SSIS包动态完成。一种方法是将每个入站文件的元数据存储在数据库表中,在包执行期间访问该元数据,然后使用基于表达式的优先级约束来确定哪个数据流(以及相应的平面文件连接管理器)用于加载每个文件格式 1) 使用SQL脚本任务将文件元数据加载到system.obj

我需要创建一个SSIS包,从不同格式(列数、不同分隔符、不同列名)的多个文件中读取数据,并插入到不同的表中

例如:我将收到

文件1,文件2…文件10

每个都有不同的格式,我需要插入到不同的表中

表1,表2,…表10


所有这些操作都应该使用单个SSIS包动态完成。

一种方法是将每个入站文件的元数据存储在数据库表中,在包执行期间访问该元数据,然后使用基于表达式的优先级约束来确定哪个数据流(以及相应的平面文件连接管理器)用于加载每个文件格式

1) 使用SQL脚本任务将文件元数据加载到system.object变量中(通过SQL脚本任务的ResultSet属性设置)

2) 使用Foreach循环容器(特别是“Foreach ADO枚举器”)迭代元数据表,将关键元数据元素加载到包变量中(值索引、头行数、分隔符、文件路径/名称等)

3) 将表达式任务添加到Foreach容器中,作为优先实体(将表达式设置为总是计算为true的值,如“1==1”,就足够了-我们只需要此任务作为Foreach容器的入口点)

4) 为每个不同的文件格式添加数据流。每个数据流将包含一个平面文件连接管理器,其“表达式”属性可用于动态设置文件名、路径、标题行数、分隔符等属性


5) 向数据流添加基于表达式的优先级约束,以评估文件的元数据并确定应将其发送到哪个数据流任务进行处理

欢迎来到Stackoverflow。请阅读帮助中心的和部分,了解如何提问。谢谢。你说的“动态”是什么意思?这种动态变化应该发生在哪里?我的意思是,单个包应该能够将不同格式的多个文件中的数据加载到加载表中。谢谢Paul A,但我将收到100多种不同的文件格式。根据您的设计,我需要创建100+DFT。我们不能用一个DFT吗?