Question

Je suis chargé d'une fonctionnalité pour envoyer des rappels de messagerie aux employés de ma société s'ils n'ont pas suivi de formulaire d'attestation via une application Web intranet.

Je pensais écrire une procédure stockée qui est appelée dans un travail de base de données nocturne (SQL Server 2008 R2).Le PROC sélectionnerait des valeurs d'adresse e-mail des employés et de la boucle via un curseur, de sorte que, pour chaque courrier électronique trouvé, un e-mail soit envoyé à l'aide de msdb.dbo.sp_send_dbmail.

La préoccupation que j'ai, c'est que cela concerne une grande entreprise et des dizaines de milliers d'e-mails pouvaient sortir de la nuit.Existe-t-il un moyen d'atténuer les problèmes de performance lors de l'envoi d'un tel volume d'e-mail?Ou aux dizaines de milliers de niveaux, cela ne devrait pas être une préoccupation?

Était-ce utile?

La solution

Je pense à votre procédure, vous pouvez créer une variable Table Table / Table et le peupler avec les courriels que vous souhaitez envoyer un courrier électronique à.

Une fois que vous avez tous les courriels d'une table, vous pouvez concaténer les adresses électroniques avec ; et le stocker sur une variable et transmettre cette variable comme paramètre Paramètre @Recipients de msdb.dbo.sp_send_dbmail Proc.

quelque chose comme ça ...

Dites que vous avez peuplé une variable de table appelée emails à l'intérieur de votre procédure

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

Concaténation des emails

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

Passez maintenant cette variable au paramètre @Recipients

EXECUTE msdb.dbo.sp_send_dbmail  @profile_name = 'ProfileName'  
                               , @recipients   = @Email_List
                               , @subject      = 'Some_Subject'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top