sp_send_dbmailストアドプロシージャは添付ファイル付きで送信します


13

私は、顧客の1人に小さな月次レポートを送信するという任務を負っています。レポートは以前にインスタンスで手動で実行され、出力はスプレッドシートにコピーされ、添付ファイルとして顧客に送信されていました。

より永続的なソリューションを探しているのでsp_send_dbmail、クエリを実行して添付ファイルとして送信するためにストアドプロシージャを使用する予定です。

メッセージのフォーマット以外はすべて機能します。最初に、出力をCSVファイルとして添付しようとしました@query_result_seperator = ','が、結果はどこにでもありました!

レポートを正常に実行すると、SQLで出力が正常に表示されます。ただし、CSVとして送信したり、メッセージ本文で送信したりすることはできません。

出力をHTMLとしてエクスポートし、添付ファイルまたはXMLとして送信する方がうまくいくと思いますが、これを行う方法がわかりません。

誰か提案はありますか?

前もって感謝します!

回答:


11

ファイルをエクスポートして添付ファイルとして送信する必要がある場合は、SQL Serverで完全に自動化することもできます。

CSVとしてエクスポートするには、BCPを使用します。この回答には詳細がありますが、主なアイデアは次のとおりです。

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='mark@mark.com',
  @subject='Client Report',
  @body='Please find your latest report attached',
  @file_attachments='D:\MyTable.csv';

必要に応じて、複数のファイルを1つのメールに添付できます


8

はい。MSにリストされているように、HTML形式でレポートを送信できます。

シナリオ:この例では、danw @ Adventure-Works.comという電子メールアドレスを使用して、Dan Wilsonに電子メールメッセージを送信します。メッセージには件名の作業指示書リストがあり、2004年4月30日から2日未満のDueDateの作業指示書を示す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='danw@Adventure-Works.com',
    @subject = 'Work Order List',
    @body = @tableHTML,
    @body_format = 'HTML' ;

さらに、SSISスクリプトタスクを使用して、SQL ServerでHTML形式の電子メールの送信を読むことができます。

また、HTMLレポートをスケジュールする場合は、こちらをお読みください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.