SSIS - 动态列映射

Baa*_*aju 5 ssis

我正在使用SSIS从excel到OLEDB SQL进行数据转换.我在一个文件夹中有一组工作表,我必须循环,并将每个工作表中的数据插入到表中.我有一个场景,我必须通过一组具有不同列结构的Excel工作表循环.我可以通过foreach循环枚举器循环遍历每个工作表找到文件名并将它们传递给Excel源.

我想知道是否有办法在目标组件中转义这个列映射,在我的情况下它将是一个OLEDB SQL表.因为这些映射对于每个文件都不同.有没有办法动态地这样做?

Pan*_*vos 5

虽然您可以在循环内添加脚本任务来修改映射,但这不是最简单的事情,因为您必须在代码中显式创建每个映射.一个更简单的解决方案是用分隔的文本文件替换excel表,并使用批量插入任务将它们导入循环内.只要列顺序在文件和表中都相同,您就不必提供任何映射信息.

如果你不能这样做,你将努力将映射元数据存储在某个地方,例如数据库中的表,并使用它在脚本任务中创建动态映射.

一种稍微简单的方法是仅使用一个使用元数据配置SqlBulkCopy对象的脚本任务.你失去了完整数据流任务的灵活性,但如果你想要的只是加载一些临时文件中的文件,那就足够了.另外,配置SqlBulkCopy对象要比数据流任务容易得多.

  • 有关使用自定义映射的示例,请参阅http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx中的SqlBulkCopyColumnMapping类的文档.它就像提供源阅读器(excel的OleDbDataReader),目标连接以及使用源列和目标列的名称填充SqlBulkCopy对象的ColumnMappings属性一样简单.您甚至可以将ColumnMappings列表留空,在这种情况下,它会根据序号位置映射列 - 就像批量插入任务一样. (3认同)