sql >> Database teknologi >  >> RDS >> Sqlserver

E-mail-forespørgselsresultater som en HTML-tabel i SQL Server (T-SQL)

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.


  1. MySQL datetime-felter og sommertid -- hvordan refererer jeg til den ekstra time?

  2. SSMS-resultater til gitter - CRLF er ikke bevaret i copy/paste - nogen bedre teknikker?

  3. pyodbc - meget langsom bulk indsættelseshastighed

  4. Kan ikke indlæse DLL 'SqlServerSpatial.dll'