【发布时间】:2018-09-22 04:14:29
【问题描述】:
我有一个父包,我希望用它来调用同一个子包的数百个版本,以便执行从 ODBC 数据源到 SQL Server 的增量加载。这是父包的截图:
GetTableList 任务获取我想从 Excel 增量加载的所有 ODBC 表的信息。
它将它存储在变量中并使用“执行包任务”将它们传递给子包,告诉它要加载哪个表。以下是参数绑定:
我正在使用单个子包,根据从父包传递的“表”参数(如上所示)选择要加载的表。子包控制流程如下图所示。它包含(除其他外)两个数据流任务:
- 将完整的主键字段集从源下载到临时表中
- 将自上次加载后发生更改的所有记录下载到最终表中
子包控制流程:
它大部分都在工作。我已经能够参数化执行 SQL 任务、数据流中的数据源查询、连接管理器和目标表,所有这些都使用从父包传递的参数。
但是,数据流给了我一个错误。 SSIS 似乎不会自动将源列“映射”到目标,如下所示:
列名和数据类型匹配。通常我会进入映射页面并直接连接它们,但是因为我试图使用同一个子包来加载所有表,所以我不能这样做 - 它必须是自动的。 如何创建映射?
我尝试了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