根据条件控制SSIS包中的流程

问题描述 投票:0回答:2

有没有办法有条件地(通过脚本任务或其他任何东西)控制SSIS中的程序流程?

目前我有一个包可以动态创建 5 个不同的 Excel 工作表(通过执行 SQL 任务)。有时可能所有 5 个都有数据,或者只有 1 个可能有数据。当只有 1 有数据时,就可以了。但当有 5 个 DFT 试图同时将数据写入同一工作簿(尽管其中有不同的工作表)时,真正的问题就出现了。包因 OLEDB 错误而失败。

经过一番绞尽脑汁,我终于发现这是一个并发控制问题,不允许我同时写入 Excel 文件。为了进一步解决我的解决方案,我使用优先约束表达式来控制是否创建工作表。 但真正的问题是,在创建工作表后,包尝试同时将数据写入 2 个不同的工作表时会失败。

有没有办法为 DFT 分配“执行订单”?这就是我寻找脚本任务的原因,以便当特定工作表的计数为 0 时,它不起作用并且控件移动到另一个分支。

我希望我没有让你感到困惑。但如果有的话,我会很高兴提供有关这个问题的更多细节。感谢您的阅读。

ssis conditional-statements control-flow
2个回答
9
投票

我的第一个想法是拥有一堆序列容器,每个可能的 Excel 工作表一个,每个容器包含三个任务:

  1. 一个脚本任务,用于确定是否创建工作表,并相应地设置布尔包变量
  2. 用于创建工作表的 SQL 任务
  3. 用于填充工作表的数据流任务

任务 1 和 2 之间的优先约束将是布尔值为 true 的表达式:

screenshot of precedence constraint editor showing expression of @DoNorthRegion

任务 2 和 3 之间的优先级约束将是成功约束,序列容器之间的优先级约束也是如此。总的来说,它看起来像这样:

screenshot of four sequence containers, one expanded to show contents


0
投票

为了一目了然,在下面的示例中,两个条件放在一行,它们位于每个 SQL 任务的输出箭头的“fx”表达式中。您需要双击每个箭头。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.