2011-08-24 128 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