sp_send_dbmail отправленная хранимая процедура с вложением

13

Мне было поручено отправить небольшой ежемесячный отчет одному из моих клиентов. Ранее отчет запускался вручную для экземпляра, выходные данные копировались в электронную таблицу и отправлялись клиенту в виде вложения.

Я ищу более постоянное решение, поэтому я намерен использовать sp_send_dbmailхранимую процедуру для запуска запроса и отправки его в виде вложения.

Все работает, кроме форматирования сообщения. Первоначально я пытался прикрепить вывод в виде файла CSV с, @query_result_seperator = ','но результаты были везде!

Когда я запускаю отчет нормально, вывод выглядит нормально в SQL. Но отправка в виде CSV или просто в теле сообщения - нет.

Я думаю, что это может работать лучше, если я экспортирую вывод как HTML и отправлю его как вложение / или как XML, но я не знаю, как это сделать.

У кого-нибудь есть предложения?

Заранее спасибо!

Gareth
источник

Ответы:

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-документ, в котором показаны рабочие задания с сроком исполнения менее двух дней после 30 апреля 2004 года. Database Mail отправляет сообщение в формате 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, прочтите это здесь.

KASQLDBA
источник