Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Envoyer les résultats de la requête par e-mail sous forme de tableau HTML dans SQL Server (T-SQL)

La messagerie de base de données de SQL Server a une procédure stockée appelée sp_send_dbmail que vous pouvez utiliser pour envoyer des e-mails depuis SQL Server.

Vous pouvez utiliser cette procédure stockée pour envoyer les résultats de la requête formatés dans un tableau HTML.

Exemple

Voici un exemple pour illustrer.

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';

Dans ce cas, je déclare une variable appelée @body_content et y mettre tout le code HTML. J'ajoute également des styles à l'aide de CSS, afin que le tableau ait des bordures, des en-têtes, etc. visibles. Cette variable est utilisée comme valeur de @body argument lors de l'envoi de l'e-mail avec le sp_send_dbmail procédure.

Si vous n'avez pas besoin d'appliquer de styles, supprimez simplement le <style></style> balises et tout le reste. Dans ce cas, vous pouvez également supprimer le class="GeneratedTable" bit de la table réelle.

Si vous souhaitez modifier les styles, consultez mon générateur de tableaux sur Quackit. Vous pouvez l'utiliser pour générer vos styles de tableau, puis vous pouvez copier/coller ces styles dans le code qui va dans vos e-mails.

Le code T-SQL passé au CAST() la fonction est ce qui renvoie les résultats de la requête, chacun dans sa propre ligne de tableau (<tr> element), et chaque colonne dans son propre <td> élément.

Assurez-vous d'inclure @body_format = 'HTML' . C'est ce qui envoie l'email au format HTML. Si vous l'omettez (ou si vous le définissez sur TEXT ), le destinataire recevra le code HTML brut, au lieu du code rendu.