J'ai été chargé d'envoyer un petit rapport mensuel à l'un de mes clients. Le rapport a précédemment été exécuté manuellement sur l'instance, la sortie copiée dans une feuille de calcul et envoyée au client en tant que pièce jointe.
Je recherche une solution plus permanente, j'ai donc l'intention d'utiliser sp_send_dbmail
procédure stockée pour exécuter la requête et l'envoyer en tant que pièce jointe.
Tout fonctionne sauf la mise en forme du message. Au départ, j'ai essayé de joindre la sortie en tant que fichier CSV avec un @query_result_seperator = ','
mais les résultats étaient partout!
Lorsque j'exécute le rapport normalement, la sortie semble correcte en SQL. Mais l'envoyer au format CSV ou simplement dans le corps du message ne le fait pas.
Je pense que cela pourrait mieux fonctionner si j'exporte la sortie au format HTML et l'envoie en tant que pièce jointe/ou XML, mais je ne sais pas comment faire.
Est-ce que quelqu'un a des suggestions?
Merci d'avance!
Si vous devez toujours exporter le fichier et l'envoyer en tant que pièce jointe, cela peut également être entièrement automatisé dans SQL Server.
L'exportation au format CSV peut être réalisée via BCP . Il y a plus de détails dans cette réponse , mais l'idée principale est:
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -T
Vous devez ensuite joindre le fichier à l'e-mail dans sp_send_dbmail
.
USE msdb;
GO
EXEC sp_send_dbmail
@recipients='[email protected]',
@subject='Client Report',
@body='Please find your latest report attached',
@file_attachments='D:\MyTable.csv';
Vous pouvez, si vous le souhaitez, joindre plusieurs fichiers à un seul e-mail .
Oui, vous pouvez envoyer le rapport au format HTML, par exemple comme indiqué dans MS:
Scénario: cet exemple envoie un message électronique à Dan Wilson à l'aide de l'adresse électronique [email protected]. Le message a le sujet Liste des bons de travail et contient un document HTML qui montre les bons de travail avec une date d'échéance moins de deux jours après le 30 avril 2004. La messagerie de base de données envoie le message au format HTML.
DECLARE @tableHTML NVARCHAR(MAX) ;
SET @tableHTML =
N'<H1>Work Order Report</H1>' +
N'<table border="1">' +
N'<tr><th>Work Order ID</th><th>Product ID</th>' +
N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
N'<th>Expected Revenue</th></tr>' +
CAST ( ( SELECT td = wo.WorkOrderID, '',
td = p.ProductID, '',
td = p.Name, '',
td = wo.OrderQty, '',
td = wo.DueDate, '',
td = (p.ListPrice - p.StandardCost) * wo.OrderQty
FROM AdventureWorks2008R2.Production.WorkOrder as wo
JOIN AdventureWorks2008R2.Production.Product AS p
ON wo.ProductID = p.ProductID
WHERE DueDate > '2006-04-30'
AND DATEDIFF(dd, '2006-04-30', DueDate) < 2
ORDER BY DueDate ASC,
(p.ListPrice - p.StandardCost) * wo.OrderQty DESC
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
EXEC msdb.dbo.sp_send_dbmail @recipients='[email protected]',
@subject = 'Work Order List',
@body = @tableHTML,
@body_format = 'HTML' ;
De plus, vous pouvez utiliser la lecture Envoi d'e-mails au format HTML dans SQL Server à l'aide de la tâche de script SSIS
Aussi, si vous voulez planifier un rapport HTML, lisez ceci ici