在 SQL Server 2008 R2 中发送电子邮件
-
21-12-2019 - |
题
我的任务是提供一项功能,如果我公司的员工尚未通过 Intranet Web 应用程序填写证明表格,则向他们发送电子邮件提醒。
我正在考虑编写一个在夜间数据库作业(SQL Server 2008 R2)中调用的存储过程。该过程将选择员工电子邮件地址值并通过光标循环遍历它们,以便对于找到的每封电子邮件,都会使用 msdb.dbo.sp_send_dbmail 发送电子邮件。
我担心的是,这是一家大公司,每晚可能会发出数以万计的电子邮件。发送如此大量的电子邮件时,是否有办法减轻性能问题?或者在数万的级别上它不应该是一个问题?
解决方案
我认为在您的程序中,您可以创建一个临时表/表变量,并用您想要发送电子邮件的电子邮件填充它。
一旦表格中包含所有电子邮件,您就可以将电子邮件地址与 ;
并将其存储到一个变量中,并将该变量作为参数传递给 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'
不隶属于 StackOverflow