Enviando un correo electrónico en SQL Server 2008 R2
-
21-12-2019 - |
Pregunta
Estoy encargado con una función para enviar recordatorios de correo electrónico a los empleados en mi empresa si no han completado un formulario de certificación a través de una aplicación web de intranet.
Estaba pensando en escribir un procedimiento almacenado que se llama en un trabajo de base de datos nocturno (SQL Server 2008 R2).El Proc seleccionaría los valores de la dirección de correo electrónico de los empleados y los bucle a través de ellos a través del cursor, de modo que para cada correo electrónico encontró un correo electrónico que se envíe usando msdb.dbo.sp_send_dbmail.
La preocupación que tengo es que esto es para una empresa grande y decenas de miles de e-mail podría salir todas las noches.¿Hay alguna manera de mitigar las preocupaciones de rendimiento al enviar ese volumen de correo electrónico?¿O en las decenas de miles de niveles, no debería ser una preocupación?
Solución
Cuenta dentro de su procedimiento, podría crear una variable de tabla / tabla TEMP y llenarlo con los correos electrónicos que desea enviar un correo electrónico a.
Una vez que tengatodoslosmensajes de correo electrónicoenuna mesaentonces se podríaconcatenarlasdirecciones de correo electrónicocon;
y almacenarlaen una variabley pasaresa variablecomo parámetro para@recipientsparámetrodeprocmsdb.dbo.sp_send_dbmail.
algo como este ...
Digamos que ha poblado una variable de tabla llamada correos electrónicos dentro de su procedimiento
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
Concatenación de correos electrónicos
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
Ahora pasa esta variable en el parámetro @recipients
EXECUTE msdb.dbo.sp_send_dbmail @profile_name = 'ProfileName'
, @recipients = @Email_List
, @subject = 'Some_Subject'