sp_send_dbmail thủ tục lưu trữ gửi với tệp đính kèm


13

Tôi đã được giao nhiệm vụ gửi một báo cáo nhỏ hàng tháng cho một trong những khách hàng của mình. Báo cáo trước đây đã được chạy thủ công trên ví dụ, đầu ra được sao chép vào bảng tính và gửi cho khách hàng dưới dạng tệp đính kèm.

Tôi đang tìm kiếm một giải pháp lâu dài hơn, vì vậy tôi dự định sử dụng sp_send_dbmailthủ tục được lưu trữ để chạy truy vấn và gửi nó dưới dạng tệp đính kèm.

Tất cả mọi thứ hoạt động nhưng định dạng của tin nhắn. Ban đầu tôi đã cố đính kèm đầu ra dưới dạng tệp CSV @query_result_seperator = ','nhưng kết quả ở khắp mọi nơi!

Khi tôi chạy báo cáo bình thường, đầu ra trông ổn trong SQL. Nhưng gửi nó dưới dạng CSV hoặc chỉ trong phần thân thư thì không.

Tôi nghĩ rằng nó có thể hoạt động tốt hơn nếu tôi xuất kết quả đầu ra dưới dạng HTML và gửi dưới dạng tệp đính kèm / hoặc dưới dạng XML nhưng tôi không biết làm thế nào để làm điều này.

Có ai có bất cứ đề nghị?

Cảm ơn trước!

Câu trả lời:


11

Nếu bạn vẫn cần xuất tệp và gửi dưới dạng tệp đính kèm, điều này cũng có thể hoàn toàn tự động trong SQL Server.

Xuất dưới dạng CSV có thể đạt được thông qua BCP . Có nhiều chi tiết hơn trong câu trả lời này , nhưng ý tưởng chính là:

bcp "SELECT Col1,Col2,Col3 FROM MyDatabase.dbo.MyTable" queryout "D:\MyTable.csv" -c -t , -S SERVERNAME -T

Sau đó, bạn sẽ đính kèm tập tin vào email 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';

Bạn có thể, nếu bạn muốn, đính kèm nhiều tệp vào một email .


8

Có, bạn có thể gửi báo cáo qua định dạng HTML, ví dụ như được liệt kê trong MS:

Kịch bản: Ví dụ này gửi một thông điệp email đến Dan Wilson bằng địa chỉ email danw@Advoji-Works.com. Thông báo có chủ đề Danh sách đơn đặt hàng làm việc và chứa một tài liệu HTML hiển thị các đơn đặt hàng công việc với DoDate chưa đầy hai ngày sau ngày 30 tháng 4 năm 2004. Cơ sở dữ liệu Mail gửi tin nhắn ở định dạng 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' ;

Hơn nữa, bạn có thể sử dụng đọc email đã gửi Định dạng HTML đã trong SQL Server bằng Tác vụ tập lệnh SSIS

Ngoài ra, nếu bạn muốn lập lịch báo cáo HTML, hãy đọc ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.