SQL Server 2008 R2で電子メールを送信する
-
21-12-2019 - |
質問
イントラネット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'
. 所属していません StackOverflow