我在下面有一个查询,告诉我是否在接下来的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
感谢您的帮助
答案 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
我没试过。