Domanda

Sono incaricato di una funzione per inviare promemoria per e-mail ai dipendenti della mia azienda se non hanno completato un modulo di attestazione tramite un'applicazione Web intranet.

Stavo pensando di scrivere una stored procedure che viene chiamato in un lavoro di database notturno (SQL Server 2008 R2).Il PROC selezionerebbe i valori dell'indirizzo e-mail dei dipendenti e loop attraverso di essi tramite il cursore, in modo che per ogni e-mail trovata un'e-mail venga inviata utilizzando msdb.dbo.sp_send_dbmail.

La preoccupazione che ho è che questo è per una grande azienda e decine di migliaia di e-mail potrebbero andare a notte.C'è un modo per mitigare le preoccupazioni per le prestazioni quando si invia un tale volume di e-mail?O alle decine di migliaia di livello non dovrebbe essere una preoccupazione?

È stato utile?

Soluzione

Penso che all'interno della procedura è possibile creare una variabile TEMP Table / Table e popolarlo con le e-mail che desideri inviare e-mail a.

Una volta che hai tutte le e-mail in una tabella, è possibile concatenare gli indirizzi e-mail con ; e memorizzarlo a una variabile e passare quella variabile come parametro sul parametro @recipients di msdb.dbo.sp_send_dbmail Proc.

Qualcosa come questo ...

Dì che hai popolato una variabile da tavolo chiamata e-mail all'interno della tua procedura

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
.

Concatenazione delle e-mail

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
.

Ora passa questa variabile al parametro @recipients

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top