有没有办法忽略 SSIS 中的映射错误?

Is there a way to ignore mapping errors in SSIS?

我在 SSIS 中有一个数据流,它使用 ODBC 源进行条件拆分。

源 returns 取决于源中数据可用性的一组动态列 - 列数从 1 到 13。

在我的条件拆分中,我让它指向源并将数据馈送到适合其列数的目的地。

示例:

条件1 -> 将第1列映射到第1列,忽略其他12列 条件2 -> 将第1列和第2列映射到第1列和第2列并忽略其他11列

但是,如果源仅包含 1 列,则在第二个条件下它会失败,因为 "there are some mapping errors on this path"

我知道列数永远不会超过 13,这意味着我可以为第 1 - 13 列设置条件。

有什么方法可以忽略映射错误或强制 SSIS 在我的条件拆分中的最后一个可执行案例处停止?

我个人不想深入研究脚本组件,所以如果这可以通过条件拆分来完成,我会松一口气!

有什么想法吗?

正如 Larnu 所指出的,数据流中的列数是设计时的产物,无法在 运行 时更改。

但是,您应该能够处理 12 个数据流。

执行 SQL 任务 -> 但是您当前的 ODBC 源正在生成一组可变的列,请确定返回的列数。将其分配给 SSIS 变量 @[User::ColumnCount]

将执行 SQL 任务的 12 个输出路径附加到占源列数的自定义数据流任务。

将每个路径的优先约束更改为 Constraint and Expression,使用 @[User::ColumnCount]==1 ... ==13

等表达式

SSIS 设计者将在您设计包时尝试验证元数据。当您 运行 包时,执行引擎也会如此。因此,您需要在完成设计后将每个数据流任务的延迟验证 属性 设置为 True。

事实上,当我考虑得更多时,您希望这里的 parent/child 包范例能更好地为您服务。为每个数据流任务设计一个包,然后让 parent/controller 包像我上面描述的那样调用它们。这应该可以简化您在尝试构建时遇到的元数据验证挑战。