0

タブ区切りのテキスト ファイルを生成し、msdb.dbo.sp_send_dbmail を使用して学生のリストを添付ファイルとして電子メールで送信する手順を実行しました。

SQL Server Management Studio で手順を実行すると、メールが 1 つしか送信されません。しかし、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

助言がありますか?

4

2 に答える 2

0

おそらくルート レベルで、この電子メールが OnError/OnTaskFailed などのイベントに関連付けられていると思います。

制御フローに追加するすべてのアイテムは、潜在的なイベントの別のレイヤーを追加します。を含む a をControl Flow想像してみてください。よくあるデザインですね。これらの各オブジェクトには、含まれるオブジェクトに基づいてイベントを発生/処理する機能があります。制御フローの OnTaskFailed イベント ハンドラーとデータ フローの OnTaskFailed イベント ハンドラーの間の距離は、5 オブジェクトの深さです。Sequence ContainerForEach EnumeratorData Flow Task

データ フローが失敗し、OnTaskFailed メッセージが発生します。そのメッセージは制御フローまで泡立ち、その結果、電子メール 1 が起動されます。その後、データ フローは終了します。ForEach ループは、データ フローが完了し、戻りステータスが失敗だったという信号を受信するため、Foreach ループに対して OnTaskFailed エラーが発生します。すべてのタスク/コンテナーが独自のイベントを発生させるまで、このパターンをうんざりするほど繰り返します。

解決策は状況によって異なりますが、通常、最も内側のオブジェクト (私の例ではデータ フロー) にのみ通知を配置するか、イベント ハンドラーのパーコレーションを無効にすることで、これを回避しています。

于 2013-10-10T18:26:56.947 に答える
0

ここで解決策を確認してください(一度に2つ取得していたのでうまくいきました)-SP_SEND_DBMAILを使用してすべての受信者に重複したメールを送信するストアドプロシージャ

再試行回数を X から 0 に変更します。これで、メールが 1 通しか届きません。ユーザーが正確に 1 分間隔で 4 つの電子メールを受信して​​いる場合は、より明白になります。

于 2013-11-06T11:14:07.477 に答える