質問

イントラネットWebアプリケーションを介して認証フォームを完了していない場合は、私の会社のEメールリマインダーを従業員に送信する機能を課しました。

私は、毎晩データベースジョブで呼び出されるストアドプロシージャを書くことを考えていました(SQL Server 2008 R2)。PROCは、Cursorを介して従業員の電子メールアドレスの値を選択し、それらを介してループを選択するので、各電子メールではMSDB.DBO.SP_SEND_DBMAILを使用して電子メールが送信されます。

私が持っている懸念は、これが大企業のためのものであり、何千もの電子メールが夜間に出かける可能性があるということです。そのような電子メールを送信するときにパフォーマンスの懸念を軽減する方法はありますか?それとも何万ものレベルでそれは懸念されるべきではありませんか?

役に立ちましたか?

解決

あなたの手順の内側を考えて、Temp Table / Table変数を作成して、電子メールを送信したいEメールで作成できます。

テーブル内のすべての電子メールがあると、;を使用して電子メールアドレスを連結して変数に保存し、その変数をMSDB.DBO.SP_SEND_DBMail Procのパラメータとしてパラメータとして渡すことができます。

このようなもの...

手順

の内部にEメールと呼ばれるテーブル変数を入力したとしました
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'
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top