【问题标题】:SSIS Parameterize MappingsSSIS 参数化映射
【发布时间】:2018-09-22 04:14:29
【问题描述】:

我有一个父包,我希望用它来调用同一个子包的数百个版本,以便执行从 ODBC 数据源到 SQL Server 的增量加载。这是父包的截图:

Parent Package

GetTableList 任务获取我想从 Excel 增量加载的所有 ODBC 表的信息。

TableInfo

它将它存储在变量中并使用“执行包任务”将它们传递给子包,告诉它要加载哪个表。以下是参数绑定:

Parameter Bindings

我正在使用单个子包,根据从父包传递的“表”参数(如上所示)选择要加载的表。子包控制流程如下图所示。它包含(除其他外)两个数据流任务:

  • 将完整的主键字段集从源下载到临时表中
  • 将自上次加载后发生更改的所有记录下载到最终表中

子包控制流程:

它大部分都在工作。我已经能够参数化执行 SQL 任务、数据流中的数据源查询、连接管理器和目标表,所有这些都使用从父包传递的参数。

但是,数据流给了我一个错误。 SSIS 似乎不会自动将源列“映射”到目标,如下所示:

Mappings

列名和数据类型匹配。通常我会进入映射页面并直接连接它们,但是因为我试图使用同一个子包来加载所有表,所以我不能这样做 - 它必须是自动的。 如何创建映射?

我尝试了this post 中显示的内容,包括标记“将外部元数据验证为假”。映射错误现在都显示在 OLEDB 目标上:

Error: 0xC0202005 at GetKeys, dw_keys [2]: Column "codeiden" cannot be found at the datasource.

Error: 0xC0202025 at GetKeys, dw_keys [2]: Cannot create an OLE DB accessor. Verify that the column metadata is valid.

Error: 0xC004701A at GetKeys, SSIS.Pipeline: dw_keys failed the pre-execute phase and returned error code 0xC0202025.

【问题讨论】:

  • 不清楚。这句话是什么意思? “我不知道如何使用参数使它们相互映射。”
  • 感谢选项卡。我的意思是我不知道如何生成和修复映射。当我进入数据流并单击目的地时,我可以右键单击“通过匹配名称映射项目”。当有未映射的列时,我可以双击连接并选择“删除未映射的列”。我想自动完成这两件事。
  • 你在说什么映射?这个“通过匹配名称映射项目”在哪里?您使用的是导入向导还是除了 SSIS 之外的其他东西?我认为您的问题将受益于一些屏幕截图。我仍然不知道你在哪里。
  • 抱歉 - 我添加了一些截图。我没有使用导入向导,只是数据流中的源和目标任务。在目标任务中,您将源列“映射”到目标列。看来我无法自动执行此操作,这使我无法使用同一个子包来加载所有表。我还没有足够的积分来嵌入截图,所以它们必须是链接。

标签: sql-server ssis


【解决方案1】:

好的,我想我现在理解你了,答案是否定的。无论包是子包、父包还是独立包,都不能在运行时动态分配目标列映射。

目标列映射必须在包创建时分配,并且在运行时不能更改。

【讨论】:

  • 好的。那么看起来不可能使用单个子包来进行多个表数据传输。我想我需要学习 Biml :)
  • 仅当所有表的列(名称和数据类型)完全相同时。
【解决方案2】:

实际上,经过进一步研究,我发现使用 CozyRoc Data Flow Plus 产品可以做到这一点,如this blog post 中所述。

基本上,它允许您使用动态列映射创建数据流。您不能使用 ODBC 数据源,但可以将 ADO.NET 数据源与 ODBC 驱动程序一起使用,还可以动态映射数据转换任务以说明 ADO.NET 源如何强制您进入 Unicode 列。

看来我什至不需要 Parent 包,只需要一个 ForEach 循环,我可以将包含表信息的 RecordSet 传递给我要加载的所有表。

使用 CozyRoc 产品时,关键是将所有内容标记为“DelayValidation”,并将所有数据流任务标记为“ValidateExternalMetadata”为 false。

目前只是使用试用版,需要确定是否值得。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多