以下に、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 = '[email protected];',
@subject = 'Jobs Due Today';
研究
私はこれをほとんど成功せずに試したので、うまくいけば、この単純なブールチェッカーを適用できない理由である私のSQL知識です。メールを送信する前に下部の@bodyタグをチェックすると確信しており、IFステートメントで確認できます。
http://www.sqlservercentral.com/Forums/Topic1131198-391-1.aspx
助けてくれてありがとう
クエリの結果がない場合は、@xml
変数を空にする必要があるため、次のことを確認できます。
if (len(@xml) > 0)
begin
EXEC msdb.dbo.sp_send_dbmail
@body = @body,
@body_format ='HTML',
@recipients = '[email protected];',
@subject = 'Jobs Due Today';
end
私はそれを試していません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加