2014-06-06 31 views
0

我有一个查询调查预定的ETL任务启动表的查询。该查询为我提供了包名和所需的参数。我想要并行执行它们,但因为要运行的计划任务的数量是动态的,所以我使用ForEach循环遍历查询返回的每一行,并同样动态执行它们。这似乎最明显是连续的,而不是平行的。我想要发生的是控制流启动SSIS包并继续下一个迭代,启动下一个包等,而不是等待一个包完成后再开始下一个包。SSIS - 在当前步骤完成之前如何使控制流程继续?

有没有办法做到这一点?

回答

0

确切的解决方案取决于应用程序的细节,但作为一般方法,我建议将表读入一个或多个变量,并使用这些变量的值作为优先约束来相应地执行包。这将避免使用for循环并提供并行性。

另一个探索的解决方案是SQL Server代理,它在大多数情况下都能胜任。

SSIS示例。比方说,我们将从SQL Server中的任务读入变量RunTask1,RunTask2,RunTask3,RunTask4和RunTask5。如果变量的值为1,我们将运行相应的任务,并且不会运行任何其他值。下图显示了如何使用这些数据作为优先约束(在本例中的任务3):

enter image description here

+0

使用precendence约束听起来像一个有趣的选择,但我不知道我在下面。如果我已经将排队任务表加载到一个变量中,我如何从优先约束控件读取它?另外,如何提供并行性?也许你可以给我一个你的意思的例子..? – GreenShepherd

+0

我已经添加了一个例子。 – Jayvee

+0

谢谢你。但是,如果我有多个需要并行运行的任务1的多个实例(当然有不同的参数)呢? – GreenShepherd

相关问题