首页 > 解决方案 > SSIS 参数化映射

问题描述

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

父包

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

表信息

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

参数绑定

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

子包控制流程:

在此处输入图像描述

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

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

映射

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

我尝试了这篇文章中显示的内容,包括将“将外部元数据验证为错误”。现在映射错误都显示在 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.

标签: sql-serverssis

解决方案


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

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


推荐阅读