如何在SQL Server 2012中批量重发历史日期的SSRS订阅报表?
补发生成故障期间报表的可行方案
方案一:通过SSRS订阅配置指定历史日期
- 打开Report Manager UI,定位到目标报表,进入订阅页面
- 创建新订阅,选择邮件发送渠道(前提是SSRS已配置好邮件服务器)
- 在参数设置步骤,把报表的日期参数指定为故障期间的具体范围(按天补送就单独设置每日日期)
- 若需批量处理每日报表,可创建多份订阅对应不同日期;或者结合SQL Server代理作业,用参数化日期表达式循环执行
方案二:用rs.exe命令行工具批量生成发送
rs.exe是SSRS自带的命令行工具,适合批量处理:
- 编写VB脚本(比如命名为
BatchReport.rss),脚本里定义报表路径、日期参数、收件人、邮件内容等 - 在脚本中循环遍历故障期间的所有日期,逐个生成报表并发送邮件
- 执行命令触发脚本:
rs.exe -i BatchReport.rss -s http://<你的新报表服务器地址>/ReportServer -u <用户名> -p <密码>
脚本核心逻辑示例:
Dim startDate As Date = #故障开始日期# Dim endDate As Date = #故障结束日期# Dim currentDate As Date = startDate While currentDate <= endDate Dim params() As ParameterValue = {New ParameterValue() {Name="ReportDate", Value=currentDate.ToString("yyyy-MM-dd")}} '调用Render方法生成报表,再通过邮件组件发送 currentDate = currentDate.AddDays(1) End While
方案三:通过SSRS数据库手动创建历史订阅任务
SSRS的订阅数据存在ReportServer数据库中:
- 备份
ReportServer数据库后,查询Subscriptions表,找到现有正常订阅的记录 - 复制该记录,修改
Parameters字段替换为故障期间的日期参数,调整NextRunTime为对应日期 - 保存修改后,SSRS代理会自动执行这条订阅任务
关于SQL Server 2012 SSRS的API说明
SQL Server 2012的SSRS没有官方REST API,它使用的是SOAP API。你可以访问报表服务器的/ReportServer/ReportService2010.asmx路径查看WSDL文档,基于这个文档编写代码或脚本调用订阅、渲染等操作。
内容的提问来源于stack exchange,提问作者Trevor
相关产品推荐
相关产品推荐

