SSIS 中的流量控制有多强制性?

How mandatory is flow control in SSIS?

我有一个正在编写的 SSIS 包。在 foreach 循环中有一堆任务。它有一个必须首先执行的任务,但其余的可以按任何顺序执行。

假设我有 "task1",这是必须在 foreach 循环中首先执行的 1,然后可以随时执行其他所有操作。

假设括号 () 代表容器,-> 代表优先约束。

这是一个有效的控制流,它会导致整个包完成,同时先完成任务 1 吗?:

foreach(task1 -> SequenceContainer( task2  task3  task4 ))

或者我必须指定

foreach (     task2 <- task1 -> task3 
                         |
                         v
                       task4              )

此外,如果这确实有效,并且我有 foreach 在失败时继续下一次迭代,它会在模块失败后立即跳到下一次迭代,还是会在继续之前尝试完成所有事情下一次迭代?

在其所有子任务都报告完成之前,序列容器不会报告完成。如果您的子任务真正独立,那么 运行 它们并发是一个非常好的主意。

根据我的经验,只要任务不依赖于先前任务的完成,SSIS 就可以在没有流控制的情况下正常工作。它允许系统并发工作,可以更快。

要记住的问题是系统并发工作。如果您的任务涉及相同的表,您可能会遇到死锁、事务等待或意外结果。