sp_send_dbmail存储过程带有附件发送


13

我的任务是向其中一位客户发送一份小型月度报告。该报告以前是在实例上手动运行的,输出已复制到电子表格中并作为附件发送给客户。

我正在寻找一个更永久的解决方案,因此我打算使用sp_send_dbmail存储过程来运行查询并将其作为附件发送。

一切正常,但消息格式正确。最初,我尝试将输出附加为带有CSV文件的CSV文件,@query_result_seperator = ','但结果无处不在!

当我正常运行报表时,在SQL中输出看起来不错。但是,将其作为CSV或仅在邮件正文中发送就没有了。

我认为如果将输出导出为HTML并以附件/或XML格式发送输出可能会更好,但是我不知道该怎么做。

有没有人有什么建议?

提前致谢!

Answers:


11

如果仍然需要导出文件并将其作为附件发送,则也可以在SQL Server中将其完全自动化。

通过BCP可以导出为CSV 。这个答案还有更多细节,但是主要思想是:

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

您可以根据需要将多个文件附加到一封电子邮件中


8

是的,您可以通过HTML格式发送报告,例如MS中列出的格式:

方案:此示例使用电子邮件地址danw@Adventure-Works.com向Dan Wilson发送电子邮件。该消息具有主题工作订单列表,并且包含一个HTML文档,该文档显示了2004年4月30日后不到两天的带有DueDate的工作订单。数据库邮件以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报告,请在此处阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.