sp_send_dbmail procedura memorizzata invia con allegato


13

Mi è stato assegnato il compito di inviare un piccolo rapporto mensile a uno dei miei clienti. Il report è stato precedentemente eseguito manualmente sull'istanza, l'output è stato copiato in un foglio di calcolo e inviato al cliente come allegato.

Sto cercando una soluzione più permanente, quindi intendo utilizzare la sp_send_dbmailstored procedure per eseguire la query e inviarla come allegato.

Tutto funziona tranne la formattazione del messaggio. Inizialmente ho provato a collegare l'output come file CSV con un @query_result_seperator = ','ma i risultati erano ovunque!

Quando eseguo normalmente il rapporto, l'output sembra corretto in SQL. Ma non lo invia come CSV o semplicemente nel corpo del messaggio.

Penso che potrebbe funzionare meglio se esporto l'output come HTML e lo invio come allegato / o come XML ma non so come farlo.

Qualcuno ha qualche suggerimento?

Grazie in anticipo!

Risposte:


11

Se è ancora necessario esportare il file e inviarlo come allegato, questo può anche essere completamente automatizzato in SQL Server.

L'esportazione come CSV può essere ottenuta tramite BCP . Ci sono maggiori dettagli in questa risposta , ma l'idea principale è:

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

Quindi allegare il file all'e-mail in 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';

Se lo desideri, puoi allegare più file a un'unica e-mail .


8

Sì, puoi inviare il rapporto in formato HTML, ad esempio come elencato in MS:

Scenario: questo esempio invia un messaggio di posta elettronica a Dan Wilson utilizzando l'indirizzo di posta elettronica danw@Adventure-Works.com. Il messaggio ha l'oggetto Elenco ordini di lavoro e contiene un documento HTML che mostra gli ordini di lavoro con scadenza Due meno di due giorni dopo il 30 aprile 2004. Posta elettronica database invia il messaggio in formato 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' ;

Inoltre, è possibile utilizzare l' email di invio HTML in lettura in SQL Server utilizzando l'attività Script SSIS

Inoltre, se si desidera pianificare un report HTML, leggere qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.