【问题标题】:Select Values based on Range Automatically and Trigger Email自动根据范围选择值并触发电子邮件
【发布时间】:2012-10-03 13:39:45
【问题描述】:

要查询数据范围的表:

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 包加载一次。

现在我希望在 Variance 列中的数据落在 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 中进行设置的过程。

提前致谢

【问题讨论】:

    标签: sql sql-server tsql triggers jobs


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • Variance 列只考虑 startrange 和 endrange 下的值
      • @Gallop 。 . .在您的示例中,表中有三个值。三个值都用了吗?
      • 嗨,Gordon - 我开发了一个 SSIS 包,它将每半小时将数据加载到数据库表中。只有这两个值将被用作问题中的可用值 此外,还按照您的建议开发了一个 SP,它已在问题中更新但是我如何按小时自动检查数据库表以及值是否在范围内触发电子邮件警报?提前致谢
      • @Gallop 。 . .我会使用 SQL Server 代理中的作业来安排这样的任务,并让它每小时运行一次。
      • SELECT [SlNo] AS 'td','',[date] AS 'td','', [lag] AS 'td','', Percent AS 'td' FROM TestTbl WHERE (percent >= @Start AND percent
      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多