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