我需要创建单个SSIS包来从不同格式的多个文件(列数,不同的分隔符,不同的列名)中读取数据并插入到不同的表中。
例如:我会收到
file1,file2 ... file10
每个都有不同的格式,我需要插入不同的表
Tabl1,表2,......表10.
所有这些操作都应该使用单个SSIS包动态完成。
答案 0 :(得分:0)
一种方法是将关于每个入站文件的元数据存储在数据库表中,在包执行期间访问该元数据,然后使用基于表达式的优先约束来确定要使用哪个Dataflow(和相应的平面文件连接管理器)用于加载每种文件格式。
1)使用SQL Script Task将文件元数据加载到system.object变量中(通过SQL Script Task的ResultSet属性设置)
2)使用Foreach循环容器(特别是" Foreach ADO枚举器")迭代元数据表,将关键元数据元素加载到包变量中(值索引,标题行数,分隔符,文件路径/名称等)
3)将一个表达式任务添加到Foreach容器中作为优先级实体(将表达式设置为始终计算为true的值,如" 1 == 1"就足够了 - 我们只需要这个任务作为foreach容器的入口点。)
4)为每种不同的文件格式添加数据流。每个数据流都将包含一个平面文件连接管理器,其表达式为"表达式"然后可以使用属性动态设置属性,例如文件名,路径,标题行数,分隔符等。
5)向数据流添加基于表达式的优先约束,以评估文件的元数据,并确定应将哪个DataFlow任务发送到处理中。