Database Mail van SQL Server heeft een opgeslagen procedure genaamd sp_send_dbmail
die u kunt gebruiken om e-mails te verzenden vanuit SQL Server.
U kunt deze opgeslagen procedure gebruiken om queryresultaten te verzenden die zijn opgemaakt in een HTML-tabel.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
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';
In dit geval declareer ik een variabele genaamd @body_content
en zet alle HTML-code erin. Ik voeg ook enkele stijlen toe met behulp van CSS, zodat de tabel zichtbare randen, kopteksten, enz. heeft. Deze variabele wordt gebruikt als de waarde van de @body
argument bij het verzenden van de e-mail met de sp_send_dbmail
procedure.
Als u geen stijlen hoeft toe te passen, verwijdert u gewoon de <style></style>
labels en alles daartussenin. In dit geval kunt u ook de class="GeneratedTable"
. verwijderen beetje van de eigenlijke tafel.
Als je de stijlen wilt wijzigen, bekijk dan mijn tabelgenerator op Quackit. Je kunt het gebruiken om je tabelstijlen te genereren, waarna je die stijlen kunt kopiëren/plakken in de code die in je e-mails gaat.
De T-SQL-code doorgegeven aan de CAST()
functie is wat de queryresultaten retourneert, elk in hun eigen tabelrij (<tr>
element), en elke kolom binnen zijn eigen <td>
element.
Zorg ervoor dat u @body_format = 'HTML'
. opneemt . Dit is wat de e-mail in HTML-indeling verzendt. Als u dit weglaat (of als u het instelt op TEXT
), ontvangt de ontvanger de onbewerkte HTML-code in plaats van de weergegeven code.