0

要查询数据范围的表:

Id  Variance
1     2
2     17
3     7
4     4
5     20
6     1
7     111
8     8
9     18
10    67

另一张桌子

 Freq    StartRange   EndRange
H   10         7
H   8          8
H   6          20   

第一个表中的数据通过 SSIS 包每 30 分钟加载一次。

现在,我希望在方差列中的数据落在 StartRange 和 EndRange 中时触发电子邮件中的警报。

CREATE PROCEDURE [dbo].[SP_Email] @Start varchar(50),@End varchar(50),@Date datetime
AS
BEGIN
DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)

SET @xml = CAST(( SELECT [SlNo] AS 'td','',[date] AS 'td','',
   [lag] AS 'td','', Percent AS 'td'
FROM  TestTbl 
WHERE(percent >= @Start AND percent < @End)
AND CAST(CONVERT(VARCHAR,curDate,106) AS DATETIME) = CAST(@Date AS DATETIME)
ORDER BY SlNo 
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))

SET @body ='<html><body><H3>Report</H3>
<table border = 1> 
<tr>
<th> SlNo </th> <th> date </th> <th> lag </th> <th> Percent </th></tr>'    

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

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Alert', 
@body = @body,
@body_format ='HTML',
@recipients = 'abc@gmail.com'
@subject = 'Report';
END

请提出一个可以帮助我在 SQL Server 2005 中进行设置的过程。

提前致谢

4

2 回答 2

1

这可以通过SQL Server 代理作业来完成:

EXEC dbo.sp_add_job
    @job_name = N'Variance Check',
    @notify_email_operator_name='you@your.domain',
    @notify_level_email=2; -- Only notify you when YourStoredProceedure fails
GO
EXEC sp_add_jobstep
    @job_name = N'Variance Check',
    @step_name = N'Check the variance',
    @subsystem = N'TSQL',
    @command = N'EXEC YourStoredProceedure', 
    @retry_attempts = 1,
    @retry_interval = 5 ;
GO
EXEC dbo.sp_add_schedule
    @schedule_name = N'EveryThirtyMinutes',
    @freq_type = 4, -- Daily
    @freq_subday_type = 0x4, -- Minutes
    @freq_subday_interval = 30, 
    @active_start_time = NULL; -- Start right away
USE msdb ;
GO
EXEC sp_attach_schedule
   @job_name = N'Variance Check',
   @schedule_name = N'EveryThirtyMinutes';
GO
EXEC dbo.sp_add_jobserver
    @job_name = N'Variance Check';
GO
于 2012-10-03T13:50:03.943 回答
1

解决此问题的一种方法是通过触发器。但是,我不建议通过触发器发送电子邮件。

相反,在 T1 中加载数据的过程中添加一个步骤。在这一步之后,调用一个存储过程来查找满足条件的行并发送相应的电子邮件。

然而,很难确切地说出条件是什么。你的第二张桌子有三个范围。目前尚不清楚哪个应用于哪一行。

于 2012-10-03T13:50:28.820 回答