0

私は、社内の従業員がイントラネット Web アプリケーションを介して認証フォームに記入していない場合に、電子メールでリマインダーを送信する機能を任されています。

夜間のデータベース ジョブ (SQL Server 2008 R2) で呼び出されるストアド プロシージャを作成することを考えていました。このプロシージャは、従業員の電子メール アドレスの値を選択し、カーソルを介してそれらをループ処理します。これにより、検出された電子メールごとに、msdb.dbo.sp_send_dbmail を使用して電子メールが送信されます。

私が懸念しているのは、これが大企業向けであり、毎晩数万通の電子メールが送信される可能性があることです。このような大量の電子メールを送信する際のパフォーマンスの問題を軽減する方法はありますか? それとも数万レベルなら気にならないの?

4

1 に答える 1

2

プロシージャ内で一時テーブル/テーブル変数を作成し、メールを送信するメールを入力できると思います。

すべての電子メールをテーブルに格納したら、電子メール アドレスを連結し;て変数に格納し、その変数をパラメーターとして msdb.dbo.sp_send_dbmail プロシージャの @recipients パラメーターに渡すことができます。

このようなもの...

プロシージャ内に Emails というテーブル変数を設定したとします。

DECLARE @Emails TABLE(Email NVARCHAR(1000))
INSERT INTO @Emails VALUES
('aaa@aaa.com'),('bbb@aaa.com'),('ccc@aaa.com')  --<-- Three emails you want to send email

メールの連結

DECLARE @Email_List NVARCHAR(MAX);   --<-- Variable to store emails List

SELECT @Email_List = STUFF((SELECT ';' + Email [text()]
                            FROM @Emails
                            FOR XML PATH(''),TYPE)
                            .value('.','NVARCHAR(MAX)'),1,1, '')                   
FROM @Emails e 

-- Test SELECT @Email_List
-- RESULT:  aaa@aaa.com;bbb@aaa.com;ccc@aaa.com

この変数を @recipients パラメータに渡します

EXECUTE msdb.dbo.sp_send_dbmail  @profile_name = 'ProfileName'  
                               , @recipients   = @Email_List
                               , @subject      = 'Some_Subject'
于 2014-02-25T20:48:16.887 に答える