【问题标题】:SSIS - dynamic column mappingsSSIS - 动态列映射
【发布时间】:2010-06-24 07:22:32
【问题描述】:

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

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

【问题讨论】:

    标签: ssis


    【解决方案1】:

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

    如果您不能这样做,您将不得不将映射元数据存储在某处,例如数据库中的一个表,并使用它在脚本任务中创建动态映射。

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

    【讨论】:

    • 如何使用脚本任务来配置 SQLBulkcopy 对象?有我可以使用的链接吗?你能不能简单一点...对不起这么愚蠢
    • 尝试使用msdn.microsoft.com/en-us/library/… 的 SqlBulkCopyColumnMapping 类的文档以获取使用自定义映射的示例。它就像提供源读取器(Excel 的 OleDbDataReader)、目标连接和使用源列和目标列的名称填充 SqlBulkCopy 对象的 ColumnMappings 属性一样简单。您甚至可以将 ColumnMappings 列表留空,在这种情况下,它会根据列的顺序位置映射列 - 就像批量插入任务一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多