kirim prosedur tersimpan sp_send_dbmail dengan lampiran


13

Saya telah ditugaskan mengirim laporan bulanan kecil ke salah satu pelanggan saya. Laporan sebelumnya telah dijalankan secara manual pada contoh, output disalin ke spreadsheet dan dikirim ke pelanggan sebagai lampiran.

Saya mencari solusi yang lebih permanen, jadi saya bermaksud menggunakan sp_send_dbmailprosedur tersimpan untuk menjalankan kueri dan mengirimkannya sebagai lampiran.

Semuanya berfungsi kecuali pemformatan pesan. Awalnya saya mencoba melampirkan output sebagai file CSV dengan @query_result_seperator = ','tetapi hasilnya ada di mana-mana!

Ketika saya menjalankan laporan secara normal, output terlihat baik di SQL. Tetapi mengirimkannya sebagai CSV atau hanya di badan pesan tidak.

Saya pikir itu mungkin bekerja lebih baik jika saya mengekspor output sebagai HTML dan mengirimkannya sebagai lampiran / atau sebagai XML tetapi saya tidak tahu bagaimana melakukan ini.

Adakah yang punya saran?

Terima kasih sebelumnya!

Jawaban:


11

Jika Anda masih perlu mengekspor file dan mengirimkannya sebagai lampiran, ini juga bisa sepenuhnya otomatis dalam SQL Server.

Mengekspor sebagai CSV dapat dicapai melalui BCP . Ada lebih banyak detail dalam jawaban ini , tetapi gagasan utamanya adalah:

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

Anda kemudian akan melampirkan file ke email di 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';

Anda bisa, jika mau, melampirkan banyak file ke satu email .


8

Ya, Anda dapat mengirim laporan melalui format HTML, misalnya sebagaimana tercantum dalam MS:

Skenario: Contoh ini mengirim pesan email ke Dan Wilson menggunakan alamat email danw@Adventure-Works.com. Pesan tersebut memiliki Daftar Pesanan Pekerjaan, dan berisi dokumen HTML yang menunjukkan perintah kerja dengan DueDate kurang dari dua hari setelah 30 April 2004. Database Mail mengirim pesan dalam format 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' ;

Selain itu, Anda dapat menggunakan email Mengirimkan format HTML dalam SQL Server menggunakan Tugas Script SSIS

Juga, jika Anda ingin menjadwalkan laporan HTML, baca ini di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.