2013-03-27 56 views
0

我有一個具有oledb數據源的數據流。然後,我有一個執行三個Web服務調用的腳本組件,它有兩個輸出(實際上)與輸入行(每個輸入行一個輸出行)同步,一個輸出是異步的(爲每個輸入輸出多行行)。每個輸出都轉到sql更新命令。還有一個錯誤日誌輸出(也是異步)。如何爲每個輸入行執行一個事務?

我希望以某種方式將輸出封裝在事務中,以便對於每個輸入行,如果行未完全處理和更新,則該輸入行的更新都不會成功。

從我所知道的情況來看,它的工作方式是腳本處理每個輸入行並將所有內容輸出到緩衝區,然後再轉到更新命令。我希望以每行爲基礎執行所有更新,並在每個輸入行已被處理和更新時提交更改。

如何構建我的數據流以實現此目的?

我在想也許是執行源,然後通過foreach容器運行記錄,但我不確定如何通過ForEach容器將多個DataFlows連接在一起。

回答

0

這裏的解決方案是我創建一個數據流任務,該任務將用戶選入記錄集,該記錄集置於一個變量中。

然後,我使用For Each容器來讀取記錄集,並將用戶名放在一個變量中。在For Each中,我有一個具有OLEDB源的數據流,該源使用變量作爲參數來再次選擇用戶(這會導致對數據集的每次迭代進行查找,但沒關係)。

這饋給我的腳本。

另外,我把包在每個循環之前和之後執行SQL任務,這樣我就不必使用DTC事務,並且可以處理每個輸入行作爲一個單獨的事務。

0

我懷疑唯一的辦法是把的所有東西,包括更新,放在一個腳本中。 SSIS沒有公開足夠的數據流緩衝策略來給你一個很好的控制級別。事實上,要在管道內加快速度,這與您正在尋找的節流策略正好相反。 (請參閱MSDN上的Data Flow Performance Features,以瞭解可用的調整功能。)

或者,您可以構建完全自定義的目標管道組件。鑑於SSIS 2008中的調試腳本組件是多麼痛苦,這甚至可能是更好的方法。

+0

感謝您的信息,但是,我決定改變我的策略,並將所有內容都轉換爲一個具有多個輸出的腳本。我徹底改變了我的問題,我想你回答了我以前的問題。 – 2013-03-27 22:03:45

相關問題