sp_send_dbmail procedura składowana wyślij z załącznikiem

13

Zadanie polegało na wysyłaniu małego miesięcznego raportu do jednego z moich klientów. Raport był wcześniej uruchamiany ręcznie w instancji, dane wyjściowe kopiowane były do ​​arkusza kalkulacyjnego i wysyłane do klienta jako załącznik.

Szukam bardziej trwałego rozwiązania, więc zamierzam użyć sp_send_dbmailprocedury składowanej do uruchomienia zapytania i wysłania go jako załącznika.

Wszystko działa oprócz formatowania wiadomości. Początkowo próbowałem załączyć dane wyjściowe jako plik CSV, @query_result_seperator = ','ale wyniki były wszędzie!

Kiedy uruchamiam raport normalnie, dane wyjściowe wyglądają dobrze w SQL. Ale wysyłanie go jako CSV lub tylko w treści wiadomości nie.

Myślę, że może działać lepiej, jeśli wyeksportuję dane wyjściowe jako HTML i wyślę jako załącznik / lub XML, ale nie wiem, jak to zrobić.

Czy ktoś ma jakieś sugestie?

Z góry dziękuję!

Gareth
źródło

Odpowiedzi:

11

Jeśli nadal musisz wyeksportować plik i wysłać go jako załącznik, można to również w pełni zautomatyzować w programie SQL Server.

Eksportowanie jako CSV można osiągnąć za pomocą BCP . W tej odpowiedzi jest więcej szczegółów , ale główną ideą jest:

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

Następnie dołącz plik do wiadomości e-mail w sp_send_dbmail.

USE msdb;
GO

EXEC sp_send_dbmail 
  @recipients='[email protected]',
  @subject='Client Report',
  @body='Please find your latest report attached',
  @file_attachments='D:\MyTable.csv';

Możesz, jeśli chcesz, dołączyć wiele plików do jednego e-maila .

Mark Sinkinson
źródło
8

Tak, możesz wysłać raport w formacie HTML, na przykład zgodnie z listą w MS:

Scenariusz: ten przykład wysyła wiadomość e-mail do Dana Wilsona przy użyciu adresu e-mail [email protected]. Wiadomość ma temat Lista zleceń pracy i zawiera dokument HTML, który pokazuje zlecenia pracy z terminem wykonania mniej niż dwa dni po 30 kwietnia 2004 r. Poczta bazy danych wysyła wiadomość w formacie 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='[email protected]',
    @subject = 'Work Order List',
    @body = @tableHTML,
    @body_format = 'HTML' ;

Ponadto można użyć wiadomości e-mail w formacie Read Sending w programie SQL Server przy użyciu zadania skryptu SSIS

Ponadto, jeśli chcesz zaplanować raport HTML, przeczytaj to tutaj

KASQLDBA
źródło