2013-03-05 94 views
0

我有一個SSIS包,我正在處理ForEach循環中的一些文件。 在循環中,我有一個處理數據流的任務。我已經通過將回路的maxerror count設置爲0來確保即使存在錯誤的文件,循環也不會停止。我嘗試使用ON ERROR循環容器的事件處理程序上的腳本任務在消息框中捕獲錯誤。我得到三個,而不是一個錯誤。 Popagate在數據流的OnPostExecute事件中設置爲false。 請幫忙。循環(SSIS)中的循環錯誤

主要包 - 循環任務 - 數據流任務 enter image description here

+0

你能展示你的包裝設計嗎? – praveen 2013-03-05 08:55:50

+0

Praveen。請檢查截圖。雖然在我的瀏覽器中顯示不正確。控制流,數據流和循環的事件處理程序。只是一個腳本任務來說明錯誤。派生列如果發生錯誤,則填充錯誤3次。 – Akshay 2013-03-05 10:10:36

回答

1

你所得到的script taskon Error事件處理1個或多個錯誤的原因是因爲在容器中的子控件內的任何錯誤的情況下,該事件從Data Flow task提高到其furthr在propogate變量設置爲false不會在這種情況下進行工作的高達更多package levelForEach,因爲你在它的子組件設置爲0 overrides任何propogate設置MaximumErrorCount

一般來說,我嘗試創建的type int一個ErrorCount變量,在對DFT的事件處理程序的腳本任務我檢查計數

if (int.Parse(Dts.Variables["User::ErrorCount"].Value.ToString()) == 0) 
     { 
      Dts.Variables["User::ErrorCnt"].Value = 1; 
      //Do your logging operation or any operation 
     } 

因此,在這樣的第一次事件處理程序被觸發,它將變量ErrorCount設置爲1,以便DFT中的後續錯誤將使腳本任務中的IF條件失敗。

如果你只是有foreach循環內的一個組成部分,我建議你請使用以下方法

  1. MaxErrorCount屬性的foreach循環

  2. DFT創建event handler。將propogate變量設置爲False並寫上面的代碼來檢查錯誤的數量。

我一般傾向於使用的,而不是設置MaxErrorCount第二個方法,因爲這給了我更多的靈活性來處理單個組件級別的錯誤

有關詳情,請this MSDN鏈接這就解釋了在SSIS是如何工作的事件處理程序

+0

謝謝你的解決方案。第二種方法按預期工作。 – Akshay 2013-03-06 08:17:49