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

如何获取审计表最新记录并通过SSRS发送不重复邮件通知

解决SSRS邮件重复发送审计记录的问题

针对你遇到的重复发送旧记录的问题,优先通过调整SQL+新增追踪机制解决,SSRS配置调整仅作为临时方案,具体如下:

方案一:SQL层面控制(推荐,彻底解决重复问题)

SQL Server 2008 R2的SSRS快照/订阅没有内置的"已推送标记"功能,所以从数据源头控制推送范围是最可靠的方式:

  1. 新增推送追踪表
    在数据库中创建一张CUSTOMER_Audit_Pushed表,用于记录已推送的审计记录:

    CREATE TABLE CUSTOMER_Audit_Pushed (
        PushID INT IDENTITY(1,1) PRIMARY KEY,
        AuditRecordID INT NOT NULL, -- 关联CUSTOMER_Audit表的主键
        PushDateTime DATETIME DEFAULT GETDATE(),
        CONSTRAINT FK_Audit_Pushed FOREIGN KEY (AuditRecordID) REFERENCES CUSTOMER_Audit(AuditID)
    )
    
  2. 修改查询语句
    调整原查询,只筛选未被标记为已推送、且符合条件的记录:

    SELECT ca.*
    FROM CUSTOMER_Audit ca
    LEFT JOIN CUSTOMER_Audit_Pushed cap ON ca.AuditID = cap.AuditRecordID
    WHERE cap.AuditRecordID IS NULL
      AND (ca.BUS_TYPE <> ca.OLD_BUS_TYPE OR ca.RECORD_STATUS = 'DELETED') -- 替换为你判断变更/删除的逻辑
      AND ca.AuditDateTime >= DATEADD(day, -30, GETDATE())
    
  3. 标记已推送记录
    配置SSRS的数据驱动订阅(SQL Server 2008 R2支持),在邮件发送完成后,通过SQL语句将本次推送的记录ID插入到CUSTOMER_Audit_Pushed表中。如果用快照订阅,也可以在快照生成后,通过SQL Agent作业执行插入操作,确保下次查询不会再选中这些记录。

方案二:SSRS配置调整(临时 workaround,局限性大)

如果不想修改数据库,可尝试通过SSRS参数和订阅设置限制推送范围,但维护成本高:

  • 给报表添加一个@LastPushTime参数,默认值设为上次订阅的时间,查询时只筛选AuditDateTime > @LastPushTime的记录。但SQL Server 2008 R2的SSRS无法自动更新这个参数值,需要借助自定义代码或外部脚本定期更新,容易出错。
  • 放弃静态快照,改用"订阅时生成快照",但SharePoint集成的SSRS 2008 R2对快照的时间范围控制不够精准,仍可能出现重复推送。

总结

优先选择SQL层面的追踪方案,从数据源头确保只推送未发送过的记录,彻底解决重复问题。SSRS配置调整仅适合临时场景,长期来看维护复杂,可靠性低。

内容的提问来源于stack exchange,提问作者PrettyCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:06:03