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

如何将SSRS 2012订阅生成的多份报告打包为ZIP文件统一邮件发送

SSRS 2012 同批次订单报表打包ZIP统一发送解决方案

SSRS 原生订阅没有批量打包多个附件的内置功能,你可以通过以下两种常用方案实现需求:

方案1:SQL Server代理作业 + PowerShell脚本实现(门槛最低,推荐)

  • 先停掉原有自动邮件订阅,调整订阅配置为将同批次订单的报表先导出到指定本地/共享文件夹,按你预期的规则用订单号命名文件,同批次文件可增加统一的批次号前缀方便识别。
  • 编写PowerShell脚本实现核心逻辑:匹配同批次所有报表文件、打包为ZIP、发送带附件的邮件,参考脚本示例如下:
# 自定义参数配置
$batchId = "从数据库获取的当前传入文件批次号"
$tempReportPath = "C:\SSRS临时导出目录"
$zipOutputPath = "C:\SSRS打包输出目录\订单批次_$($batchId).zip"
$smtpServer = "你的SMTP服务器地址"
$smtpPort = 25
$sender = "报表通知邮箱@你的域名.com"
$receiver = "收件人邮箱@域名.com"
$mailTitle = "批次$($batchId) 订单报表汇总"

# 打包同批次所有报表
Get-ChildItem -Path $tempReportPath -Filter "*$batchId*.xlsx" | Compress-Archive -DestinationPath $zipOutputPath -Force -CompressionLevel Optimal

# 发送带ZIP附件的邮件
Send-MailMessage -From $sender -To $receiver -Subject $mailTitle -Attachments $zipOutputPath -SmtpServer $smtpServer -Port $smtpPort

# 可选:清理当次临时导出的单份报表文件
Remove-Item -Path "$tempReportPath\*$batchId*.xlsx" -Force
  • 新建SQL Server代理作业,执行频率和原有15分钟检查逻辑保持一致,作业步骤依次为:触发SSRS导出同批次订单报表、调用上述PowerShell脚本、可选清理历史过期打包文件即可。

方案2:自定义SSRS传递扩展(适合有开发能力的场景)

  • 如果你需要完全集成到SSRS原生订阅体系,可基于.NET Framework 4.0开发自定义SSRS传递扩展,在扩展逻辑内实现同批次报表收集、ZIP打包、邮件发送的全流程。
  • 扩展开发完成后部署到SSRS服务器,修改rsreportserver.config配置文件注册扩展,之后就可以直接在SSRS订阅界面选择该自定义传递方式,无需额外配置代理作业。

注意事项

  • 确保SQL Server代理服务的运行账号拥有报表导出目录的读写权限、SMTP服务器的邮件发送权限。
  • 测试阶段可在PowerShell脚本中增加日志输出逻辑,记录每批次的打包、发送状态,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:45:03