sp_send_dbmail 저장 프로 시저 첨부 파일과 함께 보내기


13

고객 중 한 명에게 작은 월별 보고서를 보내는 일을 맡았습니다. 보고서는 이전에 인스턴스에서 수동으로 실행되었으며 출력은 스프레드 시트에 복사되어 고객에게 첨부 파일로 전송됩니다.

더 영구적 인 솔루션을 찾고 있으므로 sp_send_dbmail저장 프로 시저를 사용 하여 쿼리를 실행하고이를 첨부 파일로 보내려고합니다.

모든 것이 메시지 형식 만 작동합니다. 처음에는 출력을 CSV 파일로 첨부하려고 @query_result_seperator = ','했지만 결과는 어디에나있었습니다!

보고서를 정상적으로 실행하면 SQL에서 출력이 잘 보입니다. 그러나 CSV로 또는 메시지 본문으로 보내는 것은 아닙니다.

출력을 HTML로 내보내고이를 첨부 파일 또는 XML로 보내면 더 잘 작동 할 수 있다고 생각하지만이를 수행하는 방법을 모르겠습니다.

누구든지 제안이 있습니까?

미리 감사드립니다!

답변:


11

파일을 내 보내서 첨부 파일로 보내야하는 경우 SQL Server에서 완전히 자동화 할 수도 있습니다.

BCP 를 통해 CSV로 내보낼 수 있습니다 . 이 답변에 자세한 내용 있지만 주요 아이디어는 다음과 같습니다.

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

예. MS에 나열된 것과 같이 HTML 형식을 통해 보고서를 보낼 수 있습니다.

시나리오 :이 예는 danw@Adventure-Works.com 전자 우편 주소를 사용하여 Dan Wilson에게 전자 우편 메시지를 보냅니다. 이 메시지에는 작업 주문 목록이라는 제목이 있으며 2004 년 4 월 30 일 이후 2 일 이내에 DueDate로 작업 주문을 표시하는 HTML 문서가 들어 있습니다. 데이터베이스 메일은 메시지를 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' ;

또한, 당신은 읽기를 사용할 수 있습니다 SSIS 스크립트 작업을 사용하여 SQL Server에서 HTML 형식 전자 메일 보내기를

또한 HTML 보고서를 예약하려면 여기를 읽으 십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.