SQL Servers Database Mail har en lagret procedure kaldet sp_send_dbmail
som du kan bruge til at sende e-mails fra SQL Server.
Du kan bruge denne lagrede procedure til at sende forespørgselsresultater formateret til en HTML-tabel.
Eksempel
Her er et eksempel til at demonstrere.
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';
I dette tilfælde erklærer jeg en variabel kaldet @body_content
og læg al HTML-koden ind i den. Jeg tilføjer også nogle typografier ved hjælp af CSS, så tabellen har synlige grænser, overskrifter osv. Denne variabel bruges som værdien af @body
argument, når du sender e-mailen med sp_send_dbmail
procedure.
Hvis du ikke har brug for, at nogen typografier skal anvendes, skal du blot fjerne <style></style>
tags og alt derimellem. I dette tilfælde kan du også fjerne class="GeneratedTable"
lidt fra den faktiske tabel.
Hvis du vil ændre stilene, så tjek min tabelgenerator ud hos Quackit. Du kan bruge det til at generere dine tabelstile, og derefter kan du kopiere/indsætte disse stilarter i koden, der går ind i dine e-mails.
T-SQL-koden videregivet til CAST()
funktion er det, der returnerer forespørgselsresultaterne, hver i deres egen tabelrække (<tr>
element), og hver kolonne i sin egen <td>
element.
Sørg for at inkludere @body_format = 'HTML'
. Det er det, der sender e-mailen i HTML-format. Hvis du udelader dette (eller hvis du indstiller det til TEXT
). ), modtager modtageren den rå HTML-kode i stedet for den gengivne kode.