2017-05-22 8 views
1

저장 프로 시저 msdb.dbo.sp_send_dbmail을 사용하여 쿼리 된 테이블 빌드가 포함 된 HTML 전자 메일을 텍스트로 보냅니다. 내가 저장 프로 시저를 보내 내 이메일 만들 Microsoft's MSDN에서 다음 코드 예제를 사용 :쿼리 된 테이블이 비어있을 때 sp_send_dbmail이 빈 전자 메일을 보냅니다.

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 AdventureWorks.Production.WorkOrder as wo 
       JOIN AdventureWorks.Production.Product AS p 
       ON wo.ProductID = p.ProductID 
       WHERE DueDate > '2004-04-30' 
       AND DATEDIFF(dd, '2004-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' ; 

코드가 작동하고 데이터가 내 쿼리에서 반환있을 때 완벽한 보인다. 그러나 0이 행이 반환되면 완전히 비어있는 본문과 함께 전자 메일이 전송됩니다 (표가 표시되지 않는 전후의 HTML). 내 SQL 쿼리에 데이터가 없을 때 전자 메일을 올바르게 보낼 수있는 방법이 있습니까?

답변

1

NULL/빈 집합을 연결하기 때문에 비어 있습니다. 나는. select 'this' + nullISNULL으로 랩핑 할 수 있어야하며 빈 공간을 확보해야합니다.

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>' + 
    ISNULL(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 AdventureWorks.Production.WorkOrder as wo 
       JOIN AdventureWorks.Production.Product AS p 
       ON wo.ProductID = p.ProductID 
       WHERE DueDate > '2004-04-30' 
       AND DATEDIFF(dd, '2004-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' ;