0

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

源根据源中数据的可用性返回一组动态列 - 列数从 1 到 13。

在我的条件拆分中,我让它指向源并将数据提供给适合其列数的目标。

例子:

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

但是,如果源仅包含 1 列,则它在第二个条件下失败,因为“此路径上存在一些映射错误”

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

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

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

有什么想法吗?

4

1 回答 1

2

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

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

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

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

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

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

事实上,当我更多地考虑这一点时,您会希望这里的父/子包范式能更好地为您服务。为每个数据流任务设计一个包,然后让父/控制器包像我上面描述的那样调用它们。这应该会简化您在构建它时遇到的元数据验证挑战。

于 2020-04-16T20:56:26.880 回答