O Database Mail do SQL Server tem um procedimento armazenado chamado
sp_send_dbmail
que você pode usar para enviar emails do SQL Server. Você pode usar esse procedimento armazenado para enviar resultados de consulta formatados em uma tabela HTML.
Exemplo
Aqui está um exemplo para demonstrar.
DECLARE @body_content nvarchar(max);
SET @body_content = N'
<style>
table.GeneratedTable {
width: 100%;
background-color: #ffffff;
border-collapse: collapse;
border-width: 2px;
border-color: #ffcc00;
border-style: solid;
color: #000000;
}
table.GeneratedTable td, table.GeneratedTable th {
border-width: 2px;
border-color: #ffcc00;
border-style: solid;
padding: 3px;
}
table.GeneratedTable thead {
background-color: #ffcc00;
}
</style>
<table class="GeneratedTable">
<thead>
<tr>
<th>ArtistId</th>
<th>ArtistName</th>
<th>ActiveFrom</th>
</tr>
</thead>
<tbody>' +
CAST(
(SELECT td = ArtistId, '',
td = ArtistName, '',
td = ActiveFrom, ''
FROM Music.dbo.Artists
FOR XML PATH('tr'), TYPE
) AS nvarchar(max)
) +
N'</tbody>
</table>';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DB Admin Profile',
@recipients = '[email protected]',
@body = @body_content,
@body_format = 'HTML',
@subject = 'As discussed';
Nesse caso, declaro uma variável chamada
@body_content
e coloque todo o código HTML nele. Eu também adiciono alguns estilos usando CSS, para que a tabela tenha bordas visíveis, cabeçalhos, etc. Esta variável é usada como o valor do @body
argumento ao enviar o email com o sp_send_dbmail
procedimento. Se você não precisar que nenhum estilo seja aplicado, basta remover o
<style></style>
tags e tudo mais. Nesse caso, você também pode remover a class="GeneratedTable"
bit da tabela real. Se você quiser mudar os estilos, confira meu gerador de tabelas no Quackit. Você pode usá-lo para gerar seus estilos de tabela, então você pode copiar/colar esses estilos no código que vai para seus e-mails.
O código T-SQL passado para o
CAST()
função é o que retorna os resultados da consulta, cada um em sua própria linha da tabela (<tr>
elemento) e cada coluna dentro de seu próprio <td>
elemento. Certifique-se de incluir
@body_format = 'HTML'
. Isto é o que envia o e-mail em formato HTML. Se omitir isto (ou se o definir para TEXT
), o destinatário receberá o código HTML bruto, em vez do código renderizado.