2011-08-24 81 views
0

提前我是SSIS的新手。ssis同时执行查询

我运行一个查询,它为TableA中的columnA提供了不同的值,需要按顺序处理(1然后2然后3等,但数字不断更改开始值和结束值)。

这些columnA值然后在columnB中有一组值,这些值必须通过存储过程运行,但它们都可以同时运行。目前,他们以线性方式

跑这里是一个可视化的什么,我需要做的(须藤代码)

的foreach { 的foreach { processX } }

我想要的东西: foreach processA processB ProcessC同时没有任何冲突担心 }

我在SSIS中使用控制流,它有foreach循环,但是我不知道该如何使用它来同时运行第二部分。

回答

0

当我想在控制流中的SQL Server中进行并行执行时,我通常会放几个For-Each循环,并为它们中的每一个都带回一个不同的记录集。

+0

我不确定在这种情况下会起作用。我不知道我会得到多少columnA结果,所以我不知道我需要多少额外的foreach循环。我希望它是动态的,并且不同的columnA结果决定了传递给第二步的结果(存储过程)。 – BryceD

0

目前没有办法在“并行模式”下运行Foreach循环。

我能想到的最好的方法是将您的架构重新改造为灵活的“工作者”线程模型,您可以在其中独立进行并行化。

这将需要两个SSIS包。一个提供工作单位,一个提供工作单位。所以“控制器”包将执行TableA上的foreach循环,收集它需要的任何值。然后它会将这些值插入到“待办事项”表中。 “worker”包将包含一个For循环,其中您将拥有一个执行SQL任务,该任务用于查询未处理的第一行的“待办事项”表,如果它发现这样的行,将其标记为正在处理(全部在交易中以确保没有冲突)。然后,你会让你的“工作单位”去做或不做。只有当它实际上有一些指令时,才会执行对下一个任务的优先约束。当您看不到任何新的工作单位时,您的For Loop的Eval表达式可以制定为停止(尽管您可能需要延迟以确保您的工作人员不比控制器快)。要运行所有这些,你需要启动控制器(在代理作业中),然后启动多个工人(相同的包,不同的工作) - 尽可能多地执行。

+0

好的。我要给这个方法一个镜头,看看我想出了什么。非常感谢! – BryceD