2013-10-10 15 views
0

我已經生成一個製表符分隔文本文件,並使用msdb.dbo.sp_send_dbmail學生作爲附件列表發送電子郵件的程序。當作爲SSIS包運行由sp_db_sendmail發送多封電子郵件

當我執行thoruhg SQL Server Management Studio中的程序,它會發送只有一個電子郵件。 但我創建了一個SSIS包,並安排工作每晚運行。這項工作將4份電子郵件發送給每個收件人。

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'A' 
,@recipients = @email_address 
,@subject = 'Error Records' 
,@query = 'SELECT * FROM ##xxxx' 
,@attach_query_result_as_file = 1 
,@query_attachment_filename = 'results.txt' 
,@query_result_header = 1 
,@query_result_width=8000 
,@body = 'These students were not imported' 

我已經將以下參數設置爲0(在數據庫郵件配置嚮導中),以查看它是否有任何區別。但它沒有解決問題。 AccountRetryAttempts 0 AccountRetryDelay 0 DatabaseMailExeMinimumLifeTime 0

有什麼建議?

回答

0

我假設你有這樣的電子郵件有線到事件一樣的OnError/OnTaskFailed,大概在根級別。

您添加到控制流的每個項目增加了潛在事件的另一層。想象一下Control FlowSequence Container其中包含ForEach Enumerator其中包含Data Flow Task。這是一個相當常見的設計。這些對象中的每一個都能夠根據它所包含的對象來引發/處理事件。控制流的OnTaskFailed事件處理程序與數據流的OnTaskFailed事件處理程序之間的距離爲5個對象深度。

數據流失敗並引發OnTaskFailed消息。該消息一直膨脹到控制流,導致電子郵件1被觸發。數據流然後終止。 ForEach循環接收到數據流已完成並且返回狀態爲失敗的信號,因此現在OnTaskFailed錯誤會觸發Foreach循環。重複這種模式,讓每個任務/容器都引發自己的事件。

分辨率依賴,但通常人們解決這個問題的唯一要麼把在最裏面的物體的通知(數據流在我的例子)或禁用事件處理程序的滲透。