私は、私の顧客の1人に小さな月次レポートを送信することを任されています。レポートは以前にインスタンスで手動で実行され、出力はスプレッドシートにコピーされ、添付ファイルとして顧客に送信されました。
より永続的な解決策を探しているので、sp_send_dbmail
ストアドプロシージャを使用してクエリを実行し、添付ファイルとして送信するつもりです。
メッセージのフォーマット以外はすべて機能します。最初は@query_result_seperator = ','
を含むCSVファイルとして出力を添付しようとしましたが、結果はどこにでもありました!
レポートを通常どおり実行すると、出力はSQLで正常に表示されます。ただし、CSVとして、またはメッセージ本文でのみ送信することはできません。
出力をHTMLとしてエクスポートし、それを添付ファイルとして、またはXMLとして送信すると、うまくいくと思いますが、その方法がわかりません。
誰か提案はありますか?
前もって感謝します!
それでもファイルをエクスポートして添付ファイルとして送信する必要がある場合は、SQL Serverで完全に自動化することもできます。
CSVとしてのエクスポートは [〜#〜] bcp [〜#〜] で実行できます。詳細は this answer にありますが、主な考え方は次のとおりです。
bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -T
次に、そのファイルを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';
必要に応じて、 1つのメールに複数のファイルを添付 することができます。
はい。たとえば、MSにリストされているHTML形式でレポートを送信できます。
シナリオ:この例では、電子メールアドレス[email protected]を使用して、電子メールメッセージをDan Wilsonに送信します。メッセージには件名の作業指示書リストがあり、DueDateが2004年4月30日から2日未満の作業指示書を示すHTMLドキュメントが含まれています。データベースメールはメッセージを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' ;
さらに、read SQL ServerでSSISスクリプトタスクを使用してHTML形式の電子メールを送信する を使用できます。
また、HTMLレポートのスケジュールを設定する場合は、こちらをご覧ください ここ