2017-06-06 61 views
1

我有一個簡單的包,它可以更新我的數據庫,然後將數據導出到五個不同的文件。我想要做的是生成一封電子郵件,詳細瞭解每個導出是否已成功運行。所以我想在電子郵件中這樣的事情:SSIS - 確定哪些任務失敗,發送單個郵件的詳細信息

|EXPORT | STATUS | 
| 4  | Success | 
| 5  | Success | 
| 6  | Success | 
| 7  | Failed | 
| 8  | Success | 

起初,我有獨立的成功和失敗(Logical OR)電子郵件任務設置。這使我可以確定所有任務成功或至少一次失敗......但那不是我想要的。然後,我看着this example並在我的腳本任務中用C#重寫它,但我意識到示例中的變量似乎並不存在(腳本會引發錯誤),所以我嘗試創建用戶變量並在ReadWriteVariables中傳遞它們,腳本將成功運行,但在發送郵件任務中不會顯示任何內容,腳本實際上並沒有做任何事情。

我已經看了幾個類似的問題和this one似乎要接近我想要的東西,這樣的解釋做什麼,但並不能真正幫助初學者像我這樣真正做到這一點。

下面是引用我的控制流:

My Control Flow

和腳本任務中的Main方法:

ArrayList messages = new ArrayList(); 

try 
{ 
    messages = (ArrayList) Dts.Variables["ErrorCollection"].Value; 
} 
catch (Exception Ex) 
{ 
    // Handle errors... 
} 

messages.Add(Dts.Variables["ErrorDescription"].Value.ToString()); 
Dts.Variables["ErrorCollection"].Value = messages; 
Dts.Variables.Unlock(); 
Dts.TaskResult = (int)ScriptResults.Success; 

我不知道我是否要去關於這個錯誤的方法,有可能是一個簡單的方法來做到這一點,但對SSIS來說是新的,我不知道它是什麼。任何幫助將不勝感激。謝謝!

回答

1

對,我設法弄清楚了我自己。對於任何面臨着類似的問題,這裏就是我去一下吧:

  1. 設置爲要監視每個任務的變量 - 這可能是成功/失敗10。在我的情況下,我將每個任務的變量設置爲默認成功消息字符串。
  2. 敷上OnError事件處理程序要監視
  3. 放置一個Expression TaskOnError處理程序中,並用它來您的變量設置爲未通過條件的每個任務。例如。 @[User:YourVariable] = "Failed"
  4. Send Mail Task之內,您可以連接您之前爲發送郵件任務編輯器的表達式選項卡內的MessageSource創建的每個變量。

該解決方案跳過Script Task乾脆,但如果你想建立一個更詳細的電子郵件時,你可以通過變量腳本,而不是直接進入發送郵件任務。

+0

做好發佈您的解決方案我相信人們會發現這有幫助。 。或者:所有任務失敗都寫入SSISDB(假設這是SSIS的正確版本)。您可以編寫一個查詢,從SSISDB獲取最新執行和任何錯誤,並將它們發送給他們,而不是手動編寫包中的整個線束。好處是您可以根據需要在包中添加儘可能多的附加步驟,而無需添加自定義代碼。 –