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

如何配置SSRS异常报表仅在存在数据时自动发送邮件

SSRS异常报表仅在有数据时发送邮件的配置方案

针对你的需求(仅当报表存储过程返回10分钟内的异常数据时发送邮件),提供两种可行的配置方法,解决你之前数据驱动订阅(DDS)失败的问题:

方法一:修正数据驱动订阅(DDS)配置

如果之前DDS没成功,大概率是订阅的判断逻辑没设置对,按以下步骤重新配置:

  • 第一步:准备订阅判断数据源
    创建一个专门用于判断是否发送邮件的查询,替代直接用报表的数据源:

    -- 仅当存在符合条件的数据时返回一行,触发订阅
    SELECT 
        '收件人邮箱' AS Recipient,
        '异常通知:临时工位分配提醒' AS Subject
    WHERE EXISTS (
        SELECT * FROM [desks_temporary_allocations_notifications] n 
        WHERE DATEADD(n,10,n.[notification_date]) > GETDATE()
    )
    

    这个查询只有在有异常数据时才返回结果,无数据时返回空。

  • 第二步:配置数据驱动订阅

    1. 在报表管理器中打开目标报表,创建「数据驱动订阅」
    2. 订阅的数据源选择上述判断查询的数据源(确保权限足够)
    3. 订阅设置里:
      • 收件人:选择查询返回的Recipient字段
      • 主题:选择查询返回的Subject字段
      • 报表格式:选你需要的(如PDF、Excel)
      • 执行计划:设置为每10分钟执行一次,和数据时间范围匹配
    4. 保存订阅后,只有当判断查询返回结果时,才会触发邮件发送。

方法二:SQL Server代理作业+邮件发送(更灵活)

如果DDS还是有问题,用SQL作业直接控制逻辑,步骤更直观:

  • 第一步:创建作业步骤

    1. 打开SQL Server代理,新建作业,添加一个「Transact-SQL (T-SQL)」步骤,内容如下:
      -- 先判断是否存在异常数据
      IF EXISTS (
          SELECT * FROM [desks_temporary_allocations_notifications] n 
          WHERE DATEADD(n,10,n.[notification_date]) > GETDATE()
      )
      BEGIN
          -- 存在数据时,调用邮件存储过程发送报表结果
          EXEC msdb.dbo.sp_send_dbmail
              @profile_name = '你的SMTP配置文件名', -- 提前在数据库邮件里配置好
              @recipients = '收件人邮箱',
              @subject = '异常通知:临时工位分配提醒',
              @query = 'EXEC 你的存储过程名', -- 执行报表对应的存储过程
              @query_result_header = 1, -- 显示表头
              @query_result_width = 32767,
              @attach_query_result_as_file = 1, -- 结果作为附件
              @query_attachment_filename = '工位分配异常报表.csv',
              @query_result_separator = ',';
      END
      
  • 第二步:设置作业执行计划
    把作业的执行计划设为每10分钟执行一次,和存储过程的时间范围对齐,确保及时捕获异常数据。

关键注意事项

  • 性能优化:给desks_temporary_allocations_notifications表的notification_date字段建索引,避免每10分钟扫描全表:
    CREATE INDEX IX_Desks_NotificationDate ON [desks_temporary_allocations_notifications](notification_date);
    
  • 权限检查:确保SSRS服务账户(DDS用)或SQL代理账户(作业用)有:
    1. 执行存储过程的权限
    2. 发送数据库邮件的权限(作业方法)
    3. 访问SSRS报表的权限(如果用DDS)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:15:31