在我管理的数据库中,我们有一些内部文件具有截止日期,这些文件在创建之日就由我们确定。现在,我需要接收一封电子邮件,告诉我哪一封已终止。
我用代码创建了一个简单的工作,该工作可以完成所有任务,不行。我创建了一个警报,禁止运行,总是出现错误,或者当没有出现错误时,什么也没发生。
select *
from bo
where nmdos like '%preço%'
and datafinal = DATEADD(day, -1, convert(date, GETDATE()))
我需要创建一个警报,当代码返回该档案中的名称和客户编号时
答案 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