Usuário com melhor resposta
Enviando email SQL para lista usuarios..

Pergunta
-
boa tarde, tenho um SP que envia email do sql para utilizadores... dessa forma:
EXEC msdb.dbo.sp_send_dbmail @profile_name='Nome Perfil', @recipients='usuarioA@email.teste',
no profile name posso adicionar um ou muito usuarios para receberem o email. mas o que eu quero é pegar os receptores através de uma tabela onde eu guardo os emails de destino..
a minha tabela tem apenas os seguintes campos:
id_tabela int, nome_cliente varchar(80), email_cliente varchar (150)
a minha tabela está alimentado com alguns dados, e quero passar esses users para o receptor do email... sendo assim posso controlar as pessoas que recebem o email, apagando ou inserindo mais na tabela, sem mexer no meu SP.
segunda-feira, 3 de novembro de 2014 17:45
Respostas
-
Boa Noite Flaviodantas!
Eu tenho um processo parecido na empresa, e uso o seguinte script:
CREATE TABLE emails( id_tabela int, nome_cliente varchar(80), email_cliente varchar (150) ) INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br') INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br') INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br') INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br') INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br') INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br') INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br') DECLARE @lista_emails VARCHAR(MAX) SELECT DISTINCT @lista_emails = STUFF(( SELECT ';' + email_cliente FROM emails FOR XML PATH('')),1,1,'' ) --AS Lista_Emails FROM emails SELECT @lista_emails EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Nome Perfil', @recipients = @lista_emails GO
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 12:45
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
terça-feira, 4 de novembro de 2014 20:02 -
Boa Noite Flaviodantas!
Eu tenho um processo parecido na empresa, e uso o seguinte script:
CREATE TABLE emails( id_tabela int, nome_cliente varchar(80), email_cliente varchar (150) ) INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br') INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br') INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br') INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br') INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br') INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br') INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br') DECLARE @lista_emails VARCHAR(MAX) SELECT DISTINCT @lista_emails = STUFF(( SELECT ';' + email_cliente FROM emails FOR XML PATH('')),1,1,'' ) --AS Lista_Emails FROM emails SELECT @lista_emails EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Nome Perfil', @recipients = @lista_emails GO
Pedro,
Muito legal esta sua sugestão, o melhor é que não precisamos fazer uso de While ou Cursor, com isso, o processamento fica mais simples e dinâmico.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
quarta-feira, 5 de novembro de 2014 15:39
Todas as Respostas
-
Flavio,
Se o envio do e-mail está funcionando bem, então você poderá fazer um loop para ler os registros de sua tabela utilizando um CURSOR.
Segue abaixo um exemplo para você adaptar à sua necessidade:
DECLARE @id int DECLARE @nome varchar(80) DECLARE @mail varchar(150) DECLARE SeuCursor CURSOR FOR SELECT id_tabela,nome_cliente,email_cliente FROM TB_SuaTabela OPEN SeuCursor FETCH NEXT FROM SeuCursor INTO @id,@nome,@mail WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'DISPARA E-MAIL PARA ' + @nome + ' (' + @mail + ')' FETCH NEXT FROM SeuCursor INTO @id,@nome,@mail END CLOSE SeuCursor; DEALLOCATE SeuCursor GO
Para maiores informações veja:
http://msdn.microsoft.com/pt-br/library/ms180169.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 12:45
- Não Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
segunda-feira, 3 de novembro de 2014 20:48Moderador -
Boa Noite Flaviodantas!
Eu tenho um processo parecido na empresa, e uso o seguinte script:
CREATE TABLE emails( id_tabela int, nome_cliente varchar(80), email_cliente varchar (150) ) INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br') INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br') INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br') INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br') INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br') INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br') INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br') DECLARE @lista_emails VARCHAR(MAX) SELECT DISTINCT @lista_emails = STUFF(( SELECT ';' + email_cliente FROM emails FOR XML PATH('')),1,1,'' ) --AS Lista_Emails FROM emails SELECT @lista_emails EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Nome Perfil', @recipients = @lista_emails GO
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 12:45
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
terça-feira, 4 de novembro de 2014 20:02 -
Boa Noite Flaviodantas!
Eu tenho um processo parecido na empresa, e uso o seguinte script:
CREATE TABLE emails( id_tabela int, nome_cliente varchar(80), email_cliente varchar (150) ) INSERT INTO emails VALUES (1,'User_teste01','User_teste01@empresa.com.br') INSERT INTO emails VALUES (2,'User_teste02','User_teste02@empresa.com.br') INSERT INTO emails VALUES (3,'User_teste03','User_teste03@empresa.com.br') INSERT INTO emails VALUES (4,'User_teste04','User_teste04@empresa.com.br') INSERT INTO emails VALUES (5,'User_teste05','User_teste05@empresa.com.br') INSERT INTO emails VALUES (6,'User_teste06','User_teste06@empresa.com.br') INSERT INTO emails VALUES (7,'User_teste07','User_teste07@empresa.com.br') DECLARE @lista_emails VARCHAR(MAX) SELECT DISTINCT @lista_emails = STUFF(( SELECT ';' + email_cliente FROM emails FOR XML PATH('')),1,1,'' ) --AS Lista_Emails FROM emails SELECT @lista_emails EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Nome Perfil', @recipients = @lista_emails GO
Pedro,
Muito legal esta sua sugestão, o melhor é que não precisamos fazer uso de While ou Cursor, com isso, o processamento fica mais simples e dinâmico.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
- Marcado como Resposta Ricardo Barbosa Cortes quarta-feira, 5 de novembro de 2014 18:00
quarta-feira, 5 de novembro de 2014 15:39 -
Flavio segue um exemplo
declare @Destinatarios varchar(max)
SELECT @Destinatarios = Coalesce(@Destinatarios+';','') + colEmail from TabEmail;EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SGBD Send Mail',
@recipients =@Destinatarios,
@body = 'Teste de envio de mensagem',
@subject = 'Erro na Replicação';quarta-feira, 5 de novembro de 2014 16:37 -
muito obrigado pessoal. agradeço pelas ajudas cá disponibilizado..
Pedro o teu exemplo foi simples e de facil compreençao e de aplicação também. funciona perfeitamente. agradeço.
quinta-feira, 13 de novembro de 2014 15:51