SQL Server代理 - 发送没有内容的电子邮件

时间:2015-07-03 14:28:32

标签: sql sql-server sql-server-2012

我在下面有一个查询,告诉我是否在接下来的24小时内到期,但是使用SQL Server代理,它会发送一封电子邮件,无论查询是否返回结果,所以:

我的问题

基于我将直接添加到SQL代理作业中的SQL代码,我可以将其设置为不发送查询的电子邮件返回0行计数吗?

我做了一些研究,但是应用布尔值并不能检测是否有结果,或者我可能做错了:

代码

DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)

SET @xml = CAST(( 

SELECT 
Jobs.JobID AS 'td', '' ,
Jobs.JobName AS 'td', '',
ToDoList.List AS 'td', '', 
Staff.StaffName AS 'td', '',
CONVERT(DATE, ToDoItem.DueDate)  AS 'td', '',
ToDoItem.Comment  AS 'td', ''

FROM ToDoItem 
INNER JOIN Staff ON ToDoList.StaffID= Staff.StaffID
INNER JOIN ToDoList on ToDoItem.ToDoListID = ToDoList.ToDoListID
INNER JOIN JobSummaryAndStatus ON ToDoList.JSASID = JobSummaryAndStatus.JSASID
INNER JOIN Jobs ON ProjectSummaryAndStatus.JobID= Jobs.JobID

WHERE DueDate BETWEEN GETDATE() AND GETDATE() + 1
AND Staff.StaffID = 20

FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))


SET @body ='<html><body><H3>Jobs Due Today</H3>
<table border = 1> 
<tr>
<th> Job Ref </th> <th> JobName </th> <th> List Name </th> <th> Staff Name </th> <th> Due Date </th> <th> Comments </th></tr>'    

SET @body = @body + @xml +'</table></body></html>'


EXEC msdb.dbo.sp_send_dbmail
@body = @body,
@body_format ='HTML',
@recipients = 'myemail@domain.com;',
@subject = 'Jobs Due Today';

研究

我尝试了这个并没有成功,所以希望它是我的SQL知识,这就是我无法应用这个简单的布尔检查器的原因。我确定它会在发送电子邮件之前检查底部的@body标签,我可以在这里进行各种IF声明

http://www.sqlservercentral.com/Forums/Topic1131198-391-1.aspx

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果查询中没有任何结果,@xml变量应为空,那么您应该能够检查:

if (len(@xml) > 0)
    begin
       EXEC msdb.dbo.sp_send_dbmail
       @body = @body,
       @body_format ='HTML',
       @recipients = 'myemail@domain.com;',
       @subject = 'Jobs Due Today';
    end

我没试过。