sp_send_dbmail saklı yordam eki ile gönder


13

Müşterilerimden birine aylık küçük bir rapor göndermekle görevlendirildim. Rapor daha önce örnekte manuel olarak çalıştırılmış, çıktı bir e-tabloya kopyalanmış ve müşteriye ek olarak gönderilmiştir.

Ben daha kalıcı bir çözüm arıyorum, bu yüzden sp_send_dbmailsorguyu çalıştırmak ve bir ek olarak göndermek için saklı yordamı kullanarak niyetinde .

Mesajın biçimlendirilmesi dışında her şey çalışır. Başlangıçta çıktıyı bir CSV dosyası olarak eklemeye çalıştım @query_result_seperator = ','ama sonuçlar her yerde!

Raporu normal olarak çalıştırdığımda, çıktı SQL'de iyi görünüyor. Ancak bunu CSV olarak veya yalnızca ileti gövdesinde göndermek yapmaz.

Çıktıyı HTML olarak dışa aktarıp bunu bir ek olarak veya XML olarak gönderirsem daha iyi çalışabileceğini düşünüyorum ama bunu nasıl yapacağımı bilmiyorum.

Kimsenin önerisi var mı?

Şimdiden teşekkürler!

Yanıtlar:


11

Hala dosyayı dışa aktarmanız ve bir ek olarak göndermeniz gerekiyorsa, bu da SQL Server'da tam otomatikleştirilebilir.

CSV olarak dışa aktarma BCP ile sağlanabilir . Bu cevapta daha fazla ayrıntı var , ancak ana fikir:

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

Daha sonra dosyayı içindeki e-postaya eklersiniz 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';

İsterseniz, bir e-postaya birden fazla dosya ekleyebilirsiniz .


8

Evet, raporu örneğin MS'de listelendiği gibi HTML biçiminde gönderebilirsiniz:

Senaryo: Bu örnek, danw@Adventure-Works.com e-posta adresini kullanarak Dan Wilson'a bir e-posta iletisi gönderir. İleti, İş Emri Listesi konusuna sahiptir ve 30 Nisan 2004 tarihinden iki gün sonra DueDate içeren iş emirlerini gösteren bir HTML belgesi içerir. Veritabanı Postası iletiyi HTML biçiminde gönderir.

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

Ayrıca, SSIS Komut Dosyası Görevi'ni kullanarak SQL Server'da HTML biçimlendirilmiş e-posta gönderme bölümünü kullanabilirsiniz

Ayrıca, HTML raporu planlamak istiyorsanız bunu buradan okuyun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.