Вопрос

Мне поручено отправлять напоминания по электронной почте сотрудникам в мою компанию, если они не завершили форму аттестации через веб-приложение 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'
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top