sql-server - 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.
解决方案
好的,我想我现在理解你了,答案是否定的。无论包是子包、父包还是独立包,都不能在运行时动态分配目标列映射。
目标列映射必须在包创建时分配,并且在运行时不能更改。
推荐阅读
- c# - 使用 C# 的 SQL Server 数据库备份进度
- c - 如何将字符串分配给C中的变量
- qt - 如何检查我的 qt 应用程序是否可以与 OpenGL2.0 和 GLSL 一起运行?
- c - 为什么 qsort 通过使用 typedef 枚举在 gcc 6.3.0 中导致错误?
- c++ - 转换为基本 for 循环
- python - tf.constant 和 tf.convert_to_tensor 有什么区别
- javascript - 如何在数据库中发布日期?
- javascript - Neovim 在没有配置的情况下执行不需要的 Linting
- r - 如何在 dplyr 中使用 mutate grep
- matlab - 泰勒级数排序指数