2012-06-14 40 views
1

我GOOGLE了一下,認爲我已經嘗試了幾乎所有我見過的建議,但我似乎無法得到這個工作方式我想。我確信SSIS可以做到這一點。我想SSIS陷阱錯誤,分支,然後成功退出

我有了4個任務的SSIS包,他們爲了執行:任務A,然後是B,那麼C.第四屆任務DI正在使用作爲終點,如果B出現故障......更多的是在分鐘。

任務A做一些無關的工作。我將它包括在內,因爲在包開始時有處理,如果任何一個失敗,那麼我希望包失敗 - 只是SSIS默認值,如果任務A失敗,退出包,返回碼爲1。

B是一個平面文件源的DFT,它的數據傳輸給在步驟C. B時處理是我的問題的癥結所在,因爲我要處理的任務B不同於其餘的錯誤。平面文件源不存在或被破壞並不罕見,我想捕獲/陷阱但不會導致整個程序包失敗。若B確實有錯誤,雖然,我不想處理任務C.

Ç處理我在DFT B被輸送時B沒有錯誤的數據。

我用一個「OnError」事件處理程序捕獲DFT-B中的錯誤,該事件處理程序執行發送電子郵件的SQL任務。然後,我使用「完成時」預置約束將控制流轉移到端點 - 任務D(D不做任何事情,它只是一個虛擬端點,我部分用於調試,部分是爲了給事件處理程序某處「去」 - 我不確定D甚至是必需的)。

無論如何,當我運行包並在B中觸發錯誤時,我的包執行事件處理程序(發送電子郵件就好了),它甚至繼續執行任務「D」,而在調試程序中,「D」結束成功(顯示綠色)。問題是,我的包失敗,退出代碼爲「1」。

我已經試過各種東西...... ForceExecutionValue/ForceExecutionResult/MaximumErrorcount搞亂。現在我有一個實際上甚至沒有與我的「任務D」連接的軟件包,我不確定我是如何到達那裏的(但異常處理程序SQL忠實地向我發送了一封電子郵件!)。

我不希望退出代碼爲1!我想要一個0!

幫助!謝謝!

回答

0

你有沒有嘗試過這樣的事情:

Conditional Flow

要獲得關於過渡線路的不同情況,只是你要編輯的行雙擊。紅線表示控制流程,在以前的任務失敗的情況下

編輯:我相信我誤讀了這個問題!從我所得到的,你已經可以按照預期控制流量。您的問題與退出碼一起提供。您是否嘗試過在事件處理程序屏幕中將propagate變量設置爲false?

檢查它下面的鏈接瞭解更多信息: http://simonworth.wordpress.com/2009/11/11/ssis-event-handler-variables-propagate/

+0

太感謝你了,我也終於找到了答案,你是對的,我有控制流量是否正確。 –

+0

Ack。我還在掙扎。我確實在測試包中獲得了期望的行爲(感謝我在stackoverflow上找到的一些鏈接,這導致了另一個站點,到另一個站點 - 最終發生了一些工作!)。但是現在我試圖重現生產包中的邏輯(從零開始構建解決方案),它不起作用!所以有一個非常具體的設置組合。當我知道它的時候,我會重新發布,但是我贊成幫助我和本網站獲得其他幫助。至少我已經讓它工作了一次,其餘的由我決定! –

+0

你的鏈接最終是答案。我仍然有問題,但他們最終還是蠢蠢欲動。所以......讚揚你!然而,我不能給你一個「拇指」(箭頭?)來標記你回答的問題 - 它說我沒有足夠的代表這樣做! –