Pergunta

Recebi a tarefa de enviar lembretes por e-mail aos funcionários da minha empresa, caso eles não tenham preenchido um formulário de atestado por meio de um aplicativo da Web na intranet.

Eu estava pensando em escrever um procedimento armazenado que fosse chamado em um trabalho noturno de banco de dados (SQL Server 2008 R2).O proc selecionaria os valores do endereço de e-mail do funcionário e os percorreria por meio do cursor, de modo que para cada e-mail encontrado um e-mail fosse enviado usando msdb.dbo.sp_send_dbmail.

A preocupação que tenho é que isso se aplica a uma grande empresa e dezenas de milhares de e-mails podem ser enviados todas as noites.Existe uma maneira de mitigar as preocupações de desempenho ao enviar um volume tão grande de e-mails?Ou no nível de dezenas de milhares, isso não deveria ser uma preocupação?

Foi útil?

Solução

Acho que dentro do seu procedimento você pode criar uma tabela temporária/variável de tabela e preenchê-la com os e-mails para os quais deseja enviar.

Depois de ter todos os e-mails em uma tabela, você poderá concatenar os endereços de e-mail com ; e armazene-o em uma variável e passe essa variável como parâmetro para o parâmetro @recipients do proc msdb.dbo.sp_send_dbmail.

Algo assim...

Digamos que você preencheu uma variável de tabela chamada Emails dentro do seu procedimento

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

Concatenação de e-mails

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

Agora passe esta variável para o parâmetro @recipients

EXECUTE msdb.dbo.sp_send_dbmail  @profile_name = 'ProfileName'  
                               , @recipients   = @Email_List
                               , @subject      = 'Some_Subject'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top