如何在SQL Server/SSRS中实现新增行告警并添加Enter_Date列?
一、SQL层面实现方案
1. 新增Enter_Date字段
根据数据存储方式分两种处理:
- 实时查询结果集:直接在原查询中生成进入时间,无需修改物理表
-- TABLE 1(等待X超8小时)查询 SELECT Name, Waiting_Time, GETDATE() AS Enter_Date -- 记录当前行进入结果集的时间 FROM 你的源数据表 WHERE DATEDIFF(HOUR, 等待开始时间, GETDATE()) > 8 -- TABLE 2(等待Y超4小时)查询同理 SELECT Name, Waiting_Time, GETDATE() AS Enter_Date FROM 你的源数据表 WHERE DATEDIFF(HOUR, 等待开始时间, GETDATE()) > 4
- 物理存储表:给存储告警候选数据的表添加字段,自动记录插入时间
-- 给TABLE 1对应的物理表加字段 ALTER TABLE 告警表_X ADD Enter_Date DATETIME DEFAULT GETDATE(); -- TABLE 2对应的物理表同理 ALTER TABLE 告警表_Y ADD Enter_Date DATETIME DEFAULT GETDATE();
2. 定时检查新增数据并触发告警
用SQL Server代理创建定时作业,每15分钟执行一次:
- 打开SQL Server代理,新建作业,设置执行频率为每15分钟一次
- 作业步骤中编写查询筛选最近15分钟的新增数据,并触发告警:
-- 合并两个表的新增告警数据 DECLARE @AlertData TABLE(Name VARCHAR(50), Waiting_Time VARCHAR(10), Enter_Date DATETIME) INSERT INTO @AlertData SELECT Name, Waiting_Time, Enter_Date FROM 告警表_X WHERE Enter_Date >= DATEADD(MINUTE, -15, GETDATE()) UNION ALL SELECT Name, Waiting_Time, Enter_Date FROM 告警表_Y WHERE Enter_Date >= DATEADD(MINUTE, -15, GETDATE()) -- 有数据则发送邮件告警 IF EXISTS(SELECT 1 FROM @AlertData) BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = '你的邮件配置文件', @recipients = '告警接收邮箱', @subject = '新增等待告警通知', @query = 'SELECT * FROM @AlertData', @attach_query_result_as_file = 0; END
注:需提前配置SQL Server数据库邮件功能,确保邮件正常发送
二、其他可行方案
1. SSRS数据驱动订阅
直接利用SSRS自带功能实现告警:
- 给现有报表设置数据驱动订阅,执行频率设为每15分钟
- 配置订阅规则:仅当报表数据集返回新增行时(通过对比上次执行时间或已告警记录),才发送通知
- 可选择邮件、短信(需集成第三方服务)等通知方式
2. SQL触发器实时告警
如果用物理表存储数据,可创建INSERT触发器,实时触发告警:
-- TABLE 1的触发器 CREATE TRIGGER trg_AlertNewRow_X ON 告警表_X AFTER INSERT AS BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = '你的邮件配置文件', @recipients = '告警接收邮箱', @subject = '等待X超时新增告警', @body = '以下人员等待时长超过8小时:', @query = 'SELECT Name, Waiting_Time, Enter_Date FROM inserted'; END -- TABLE 2的触发器同理 CREATE TRIGGER trg_AlertNewRow_Y ON 告警表_Y AFTER INSERT AS BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = '你的邮件配置文件', @recipients = '告警接收邮箱', @subject = '等待Y超时新增告警', @body = '以下人员等待时长超过4小时:', @query = 'SELECT Name, Waiting_Time, Enter_Date FROM inserted'; END
这种方式无需定时轮询,有新数据立即触发。
3. SSRS报表警报监控
在SQL Server Management Studio中配置SSRS警报:
- 监控报表数据集的返回结果,当检测到新增行时触发警报
- 可关联邮件通知或执行自定义脚本
关键注意事项
- 若使用实时查询(非物理表),需创建已告警记录表,记录已通知的人员和时间,避免重复发送告警
- 定时作业和触发器需确保有足够的执行权限,避免因权限不足导致告警失败
内容的提问来源于stack exchange,提问作者KapSht
相关产品推荐
相关产品推荐

