SSIS-动态列映射

SSIS-动态列映射,ssis,Ssis,我正在使用SSIS进行从excel到OLEDB SQL的数据转换。我在一个文件夹中有一组工作表,我必须循环遍历这些工作表,并将每个工作表中的数据插入到表中。我有一个场景,我必须循环浏览一组具有不同列结构的Excel工作表。我可以通过foreach循环枚举器循环遍历每个工作表,找到文件名并将其传递到Excel源 我想知道是否有办法在目标组件中转义此列映射,在我的例子中,该组件将是OLEDB SQL表。因为这些映射对于每个文件都是不同的。有没有办法动态地做到这一点 虽然可以在循环中添加脚本任务来修改

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


我想知道是否有办法在目标组件中转义此列映射,在我的例子中,该组件将是OLEDB SQL表。因为这些映射对于每个文件都是不同的。有没有办法动态地做到这一点

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

如果不能做到这一点,则需要将映射元数据存储在某个位置,例如数据库中的一个表,并使用它在脚本任务中创建动态映射


更简单的方法是只使用一个脚本任务,该任务使用元数据来配置SqlBulkCopy对象。您将失去完整数据流任务的灵活性,但如果您只想在temp-talbes中加载一些文件,这就足够了。另外,配置SqlBulkCopy对象比配置数据流任务容易得多。

如何使用脚本任务配置SqlBulkCopy对象?有我可以使用的链接吗?你能不能再简短一点。。。很抱歉,对于使用自定义映射的示例,在的SqlBulkCopyColumnMapping类的文档非常愚蠢。它非常简单,只需提供源读取器(OleDbDataReader for excel)、目标连接并使用源列和目标列的名称填充SqlBulkCopy对象的ColumnMappings属性。您甚至可以将ColumnMappings列表保留为空,在这种情况下,它会根据列的顺序位置映射列,就像批量插入任务一样。