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?

¿Fue útil?

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'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top