You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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分钟执行一次:

  1. 打开SQL Server代理,新建作业,设置执行频率为每15分钟一次
  2. 作业步骤中编写查询筛选最近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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:45:23