我一直在研究这个问题,还没有找到一个可行的答案,或者足够简单。
我在 SSRS 中内置了几个报告,我每天都通过电子邮件发送给自己。它们运行生成结果的存储过程,然后有时使用报表中的可见性函数对其进行更多筛选,或者与其他存储的过程结果进行比较。
我遇到的问题是,有时,在所有过滤器之后(无论是在存储过程中,还是按报告过滤后),都没有数据,我得到一个带有标题的"空白"报告,没有其他任何东西。我正在努力消除这些。但是,我无法执行数据驱动订阅,因为我没有 SQL Server 的企业版。我找到的防止这些空白报告的几乎每一个答案都涉及这样做。没有数据驱动,还有另一种方法可以做到这一点吗?啪!
您可以按计划运行存储过程,然后触发报表订阅(如果有记录),而不是报表触发存储过程。
您已经完成了大部分工作。
你只需要
- 结束订阅,使其不再自动运行
- 添加逻辑以检查报表的记录 -
DECLARE @CHECK AS INT = (SELECT COUNT(*) FROM <REPORT QUERY>)
-
然后
IF @CHECK > 0
,使用以下命令触发当前订阅:EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = 'xxx';
将 xxx 替换为报表订阅 ID(可在订阅链接中找到)。EXEC 不关心你的订阅是否具有步骤 1 的结束日期。
然后,只需计划存储过程按计划运行即可。报表服务器上应有一个可以使用的作业代理。