更改了Sql-Server版本,无法创建带有警报的作业来发送电子邮件

时间:2019-02-07 10:32:31

标签: sql sql-server alert jobs

在我管理的数据库中,我们有一些内部文件具有截止日期,这些文件在创建之日就由我们确定。现在,我需要接收一封电子邮件,告诉我哪一封已终止。

我用代码创建了一个简单的工作,该工作可以完成所有任务,不行。我创建了一个警报,禁止运行,总是出现错误,或者当没有出现错误时,什么也没发生。

select *
from bo
where nmdos like '%preço%'
  and datafinal = DATEADD(day, -1, convert(date, GETDATE()))

我需要创建一个警报,当代码返回该档案中的名称和客户编号时

1 个答案:

答案 0 :(得分:-1)

您可以创建存储过程来处理查询检查,这将检查是否返回任何行。如果返回行,请发送电子邮件。这可以通过以下方式实现。假设您在SQL实例中配置了dbsend邮件。

 CREATE PROCEDURE dbo.DossierEmailSend
 AS
 DECLARE @rows int;
 DECLARE @message varchar(1000);
 SET @rows = (SELECT COUNT(*)  
            FROM bo
            WHERE nmdos LIKE '%preço%'
            AND datafinal = DATEADD(day, -1, CONVERT(date, GETDATE()))
            )
 SET NOCOUNT ON 
 SET @message = '<HTML>As at ' + CONVERT(char(19),GETDATE(),120) + '<BR><BR>DOSSIER FOUND'

 IF @rows > 0 
 BEGIN

 EXEC dbo.uspSendEmail 'FOUND DOSSIER', 'YOUR EMAIL', @message, NULL, 'CC EMAIL 1; CC EMAIL 2'
 SET NOCOUNT OFF

 END

然后,您可以在SQL Agent中创建一个作业,该作业将以所需的频率执行检查。

如果缺少发送邮件sp,则可以创建它:

 CREATE proc [dbo].[uspSendEmail]
 @subject nvarchar(max),
 @to nvarchar(max),
 @body nvarchar(max),
 @file nvarchar(max)='',
 @cc nvarchar(max)='',
 @bcc nvarchar(max)='',
 @query nvarchar(max)='',
 @attach_query_result_as_file tinyint=0,
 @query_attachment_filename nvarchar(max)=''
 as      

 EXEC msdb.dbo.sp_send_dbmail @profile_name = NULL,
 @body_format = 'HTML',
 @copy_recipients = @cc,
 @blind_copy_recipients = @bcc,
 @recipients = @to,
 @body = @body,
 @subject = @subject,
 @file_attachments = @file,
 @query = @query, 
 @attach_query_result_as_file = @attach_query_result_as_file,
 @query_attachment_filename = @query_attachment_filename 
 return 0