要从中查询数据范围的表:
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
第一个表中的数据每30分钟通过一个SSIS包加载。
现在,我想要在Wariance列中的数据落入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中设置此过程的过程。
先谢谢
答案 0 :(得分:1)
这可以通过SQL Server Agent jobs:
完成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
答案 1 :(得分:1)
解决这个问题的一种方法是通过触发器。但是,我不建议通过触发器发送电子邮件。
而是向在T1中加载数据的进程添加一个步骤。完成此步骤后,调用存储过程以查找符合条件的行并发送相应的电子邮件。
然而,很难准确说出条件是什么。你的第二张桌有三个范围。目前尚不清楚哪一行适用于哪一行。