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:

Сценарій: Цей приклад надсилає електронну пошту Дану Вілсону, використовуючи електронну адресу danw@Adventure-Works.com. Повідомлення має тематичний Список робочих замовлень і містить HTML-документ, який показує робочі замовлення із DueDate менше ніж через два дні після 30 квітня 2004 р. Пошта бази даних надсилає повідомлення у форматі 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

Крім того, якщо ви хочете запланувати звіт HTML, прочитайте це тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.