2010-04-01 186 views
1

我有簡單的SSIS包,其中的錯誤事件處理程序我創建發送電子郵件任務發送錯誤的詳細信息。但是我收到了多個電子郵件,只有一個錯誤。我找到了關於所有電子郵件的方法,但它們都在vb腳本中,而我的SQL服務器是64位,這又需要進行二進制編譯的修補程序安裝。 所以我需要任何其他選項。儘管我可以發送第一封錯誤郵件並忽略其他郵件,但對我來說還是很好的。 任何建議將不勝感激。SSIS發送錯誤時發送電子郵件發送多個錯誤

回答

2

我找到了滿足我發送第一個錯誤而忽略休息的解決方案。

用於循環容器,聲明的變量計數值爲0,並在for循環容器中設置條件計數< 1;計數=計數+ 1

+0

我也使用過這種技術。 – 2010-04-02 15:25:36

9

您得到多個錯誤的原因與事件冒泡有關。如果在父包級別有一個事件處理程序,並且它具有(例如數據流任務)和數據流中的OLEDB Command組件失敗,那麼該對象將拋出錯誤並冒起來事件處理器。然後,因爲組件發生故障,數據流任務報告一個錯誤,並且它觸發事件處理程序。然後,因爲數據流任務失敗,程序包將失敗併發送到事件處理程序。過去我曾經處理過一些代碼,但現在我無法到達那臺機器。我將在今天晚些時候用完整答案更新這個問題,但它必須根據System :: PackageGUID變量檢查System :: SourceID變量,並且只在錯誤處理程序相同時運行錯誤處理程序的郵件部分。 System :: SourceID是詳細說明哪個對象拋出錯誤的變量,所以這將限制錯誤報告到那些冒泡到包級別的錯誤(即那些將會使整個任務失敗的錯誤)。

@Rajiv Varma我有一個腳本任務(其中沒有任何代碼(基本上是無操作))和一個發送郵件任務。腳本任務和發送郵件我我們的約束作爲條件之間(我設定的評估操作:言論和表達的價值

@[System::SourceID]== @[System::PackageID] 

在此進行測試,看是否錯誤的來源是主要的包對象,然後我使用發送郵件任務發送我的錯誤信息

爲什麼這樣工作的:如果我有對象的層次

主要包 - 循環任務 - 數據流任務

如果數據。流任務失敗,事件i被拋出。事件拋出後,它會冒泡到下一級,並且循環任務將引發相同的錯誤。在這個事件之後,將它拋到主包層並再次拋出相同的錯誤。這就是爲什麼@Pramodtech首先遇到了問題,每個級別都會再次觸發相同的錯誤消息。我在這裏有效地做的是忽略任何不在主包級別的錯誤。所以我不會發送任何消息,直到消息冒泡到頂層。希望這可以幫助。

+0

感謝William的解釋。 – pramodtech 2010-04-02 10:03:09

+0

威廉,你有沒有能夠再次得到這個?我面臨同樣的情況,我想看看你的解決方案。我試圖比較這些變量,但不知道如何完全實現它。 – rvphx 2012-07-17 16:15:41

+0

美麗的解決方案威廉!我喜歡它的簡單性。 – rvphx 2012-07-17 22:11:16

0

一種方法發送包含所有錯誤信息的概要的單一郵件是:

  1. 創建一個字符串變量來存儲錯誤描述概要。
  2. 在onerror事件處理程序中,使用表達式任務以存儲如下面的錯誤描述:

@ [用戶:: ErrorDescSummary] = @ [用戶:: ErrorDescSummary] + @ [系統:: ErrorDescription中]

  • 對你的包的末尾添加發送電子郵件的任務,使用優先約束編輯器來設定評估操作來「表達」和檢查
  • @ [User :: ErrorDescSummary]!=「」

    如果變量不爲空,我們將發送帶有完整錯誤摘要的錯誤電子郵件。

    +0

    我的答案可能不會回答原來的問題,但可能有助於處理多個電子郵件方案。 – 2017-08-09 13:27:15