sp_send_dbmail กระบวนงานที่เก็บไว้ส่งพร้อมแนบ


13

ฉันได้รับมอบหมายให้ส่งรายงานรายเดือนเล็ก ๆ ให้กับหนึ่งในลูกค้าของฉัน รายงานก่อนหน้านี้ได้รับการดำเนินการด้วยตนเองในอินสแตนซ์เอาท์พุทคัดลอกไปยังสเปรดชีตและส่งให้กับลูกค้าเป็นสิ่งที่แนบมา

ฉันกำลังมองหาโซลูชันที่ถาวรกว่าดังนั้นฉันตั้งใจจะใช้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';

คุณสามารถถ้าคุณต้องการแนบไฟล์หลายไฟล์ไปยังอีเมลหนึ่ง


8

ใช่คุณสามารถส่งรายงานผ่านรูปแบบ HTML ตัวอย่างเช่นตามที่ระบุไว้ใน MS:

สถานการณ์จำลอง: ตัวอย่างนี้ส่งข้อความอีเมลไปยัง Dan Wilson โดยใช้ที่อยู่อีเมล danw@Adventure-Works.com ข้อความมีรายการงานสั่งทำเรื่องและมีเอกสาร HTML ที่แสดงคำสั่งงานด้วย DueDate น้อยกว่าสองวันหลังจาก 30 เมษายน 2547 จดหมายฐานข้อมูลส่งข้อความในรูปแบบ 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' ;

นอกจากนี้คุณสามารถใช้การอ่านอีเมลที่จัดรูปแบบ HTML ใน SQL Server โดยใช้งาน SSIS Script

นอกจากนี้หากคุณต้องการกำหนดเวลารายงาน HTML อ่านที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.