Отправка электронной почты в SQL Server 2008 R2
-
21-12-2019 - |
Вопрос
Мне поручено отправлять напоминания по электронной почте сотрудникам в мою компанию, если они не завершили форму аттестации через веб-приложение INTRATENT.
Я думал о написании хранимой процедуры, которая вызывается в работе ночной базы данных (SQL Server 2008 R2).Proc будет выбрать значения адреса электронной почты сотрудника и цикл через них через курсор, так что для каждой электронной почты найден электронное письмо, отправляется с использованием MSDB.dbo.sp_send_dbmail.
Концерн у меня есть, это то, что это для крупной компании, а десятки тысяч электронного письма могут выйти на ночь.Есть ли способ смягчить проблемы с производительностью при отправке такого объема электронной почты?Или на десятках тысяч уровней это не должно быть беспокойством?
Решение
Я считаю, что внутри вашей процедуры вы можете создать переменную таблицы / таблицы TEMP и заполните ее с помощью электронных писем, которые вы хотите отправить электронную почту.
После того, как у вас есть все электронные письма в таблице, вы можете объединить адреса электронной почты с ;
и хранить его в переменной и пропустите эту переменную в качестве параметра для параметра @ReciPients of MSDB.dbo.sp_send_dbmail proc.
что-то вроде этого ...
сказать, что вы заполнили переменную таблицы, называемые электронными письмами внутри вашей процедуры
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'
.