• Imprimir

ENVIANDO CONSULTAS POR EMAIL NO SQL SERVER

 

Muita gente pensa que enviar consultas relatórios por e-mail no Sql Server é algo de outro mundo.

Ótimo continuem pensando assim agente se valoriza.

Agora vai uma ajudinha ai.

 

EXEC msdb.dbo.sp_send_dbmail

     @profile_name = 'Default Profile <<nome do profile >>', -- Profile padrão para envio de e-mail neste servidor.

    @recipients = 'O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.;O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.;O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.;O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.', -- e-mail do usuário que recebera o e-mail.

    @query = 'SELECT  * from SERVIDOR_DO_LINK_SERVE.BANCO.dbo.TABELA 

                         where convert(varchar,CAMPO_data,103)=convert(varchar,getdate(),103) and campochar="expressao entre aspa ne"' ,

    @subject = 'Relatório que me deixou maluco', -- cabeçalho do e-mail

    @body = ' Relatório em Anexo.', -- texto do e-mail 

    @attach_query_result_as_file = 1 ;

 

-- NOTA SE VOCÊ QUISER RECEBER EM VEZ DE UM ARQUIVO EM ANEXO O RESULTADO DA CONSULTA NO CORPO DO EMAIL E SÓ ALTERAR :

-- @attach_query_result_as_file = 1 ; PARA @attach_query_result_as_file = 0 ;

-- MAS SE VOCÊ QUISER RECEBER O RESULTADO DA CONSULTA EM HTML NO CORPO DO EMAIL COM TODAS AS OPÇÕES QUE O HTML POSSIBILITA VEJA O OUTRO ARTIGO PUBLICADO http://www.rosembergennes.com.br/index.php/dicas-sql-server/104-resultado-query-no-corpo-do-email 

 

 

Mais dicas.

 

Observe que podemos ter problema de quebra de linha indesejada então utilizamos a opção query_result_width tipo assim :

@query_result_width = 1000,

 --Email simples 

 

EXEC msdb.dbo.sp_send_dbmail 

@profile_name = 'XXXX', 

@recipients = 'email', 

@body = 'Se você receber esse e-mail, o recurso Database Mail está funcionando', 

@subject = 'Verificação do Recurso Database Mail' -- Enviando o resultado de uma Query em Anexo EXEC msdb.dbo.sp_send_dbmail 

@profile_name = 'XXXX', 

@recipients = 'email', 

@body = 'Segue em anexo a relação de bancos de dados no servidor', 

@subject = 'Relação de bancos de dados no servidor SQL 2005', 

@query = 'SELECT [Name], [Database_ID], [Create_date] FROM master.sys.databases', 

@attach_query_result_as_file = 1, 

@query_attachment_filename = 'DBRel.txt' 

 

 

--Enviando um arquivo em anexo EXEC msdb.dbo.sp_send_dbmail 

 

@profile_name = 'XXXX', 

@recipients = 'email', 

@body = 'Teste', 

@subject = 'Teste Envio', 

@body_format = 'TEXT', --manda o e-mail no formato HTML --pode ser HTML - o default é TEXT 

@file_attachments = 'Caminho do documento.'

 

 

 

E Antes que eu me esqueça :

 

O ambiente deve estar configurado

 

USE MASTER GO SP_CONFIGURE 'show advanced options', 1 

GO RECONFIGURE WITH OVERRIDE 

GO SP_CONFIGURE 'Database Mail XPs', 1 

GO RECONFIGURE WITH OVERRIDE 

GO 

 

 

 ATUALIZAÇÃO 1 Voce tambem pode mandar um email com o conteudo de um arquivo tipo texto. 

 

 Lembre-se que : 

 sqlcmd -d <<< SEU BANCO >>> -U <<<user >>> -P <<<senha>>>> -o report_imp.txt -i "C:\Temp\instruções_sql_a_serem_executadas.sql" Onde report_imp.txt é o arquivo com as saidas dos procedimentos que voce mandou executar no arquivo instruções_sql_a_serem_executadas.sql 

 Ai... 

 Voce pega este arquivo e manda por email tipo assim :

 use <<< SEU BANCO >>> -- CREATE TABLE TABELA_ENVIA_EMAIL(TEXTO VARCHAR(250) NOT NULL) 

 delete TABELA_ENVIA_EMAIL BULK INSERT TABELA_ENVIA_EMAIL FROM 'Z:\Backup\Importa_CRM\report_imp.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); -- SELECT TEXTO FROM [<<< SEU BANCO >>>].[dbo].[TABELA_ENVIA_EMAIL] 

 -- UPDATE TABELA_ENVIA_EMAIL SET TEXTO=LTRIM(RTRIM(TEXTO)) DELETE TABELA_ENVIA_EMAIL WHERE TEXTO ='' EXEC msdb.dbo.sp_send_dbmail 

 

 @profile_name = 'PROFILE', 

 @recipients = 'O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo.', -- 

 @body =@texto, 

 @subject = 'Relatorio de Importacao Dados do Ambiente Oracle',

 @body_format = 'TEXT', 

 @query = 'SELECT TEXTO FROM [<<< SEU BANCO >>>].[dbo].[TABELA_ENVIA_EMAIL]' ATUALIZAÇÃO 2 Tive um pequeno problema com a versão sql server 2016. 

 

DANDO ACESSO A UM USUARIO A ENVIO DE EMAIL

 

USE [msdb]

GO

CREATE USER << NOME DO USUAIRO >> FOR LOGIN << NOME DO USUAIRO >>

GO

USE [msdb]

GO

ALTER ROLE [DatabaseMailUserRole] ADD MEMBER << NOME DO USUAIRO >>

GO