首先了解环境。
问题:
我有一个SSRS报告数据集,该数据集从非常标准的存储过程中检索信息。最近,我不得不更改一行代码,并在结果集中添加与此更改相关的列。在SSMS Query Analyser中测试存储过程时,可以按预期工作。以下是预期结果的摘录:
但是在刷新数据集(添加新列)后,数据集现在在两列下针对所有返回的记录返回不一致的值,而当我在SSMS中运行它时,检索数据的存储过程正在返回值。即使我在查询设计器中运行它,它仍然返回不一致的值。
以下是屏幕截图:
这不是共享数据集,据我所收集的报告,没有应用任何缓存。尝试查看是否存在,或尝试设置缓存时,报表管理器返回以下错误:
报表服务器数据库内发生错误。这可能是由于数据库中的连接失败,超时或磁盘空间不足所致。 (rsReportServerDatabaseError) 获取在线帮助有关此错误的更多信息,请导航到本地服务器计算机上的报表服务器,或启用远程错误。
如下:
即使在以下情况下,也会发生此行为:
关键在于:
(请记住,存储过程返回在SSMS中更正的数据)。
-当我对存储过程中的值进行硬编码时,这些值在通过SSMS查询分析器执行存储过程时出现,但在通过查询设计器运行存储过程时不出现(相同的不一致值)。
-我有另一个(摘要)报告,它通过另一个过程从此存储过程(嵌入式)获取数据。该报告正确返回数据。
-我试图创建第二个存储过程来执行此存储过程(类似于“摘要”所做的事情),但仍然行为不当。
-当我使用用于在SSMS Query Analyzer中测试存储过程的脚本时,它将返回值!但这不是理想的,因为已经定义了参数,并且当我删除这些参数时,它又恢复为正常(错误)行为。
我正在考虑添加一种快照表。存储过程将首先在其中构建数据,然后从该表中进行选择以返回数据的位置。这里的问题是此报告是由多个用户运行的,我没有时间(圣诞节前三天,我已经在圣诞节休假)去设计整个快照系统。 昨天我在互联网上做了很多研究。并遍历了以下站点/论坛中给出的所有建议:
Why is my SSRS report showing old data?
SSRS: field shows correct in query but wrong in report preview
How to clear cache of 1 stored procedure in sql server
https://jazz.net/forum/questions/243993/report-builder-not-showing-updated-data
还有其他有关缓存的内容,等等。
我什至让DBA重新启动该SSRS服务器,以查看是否可以刷新任何形式的缓存。 我还向存储过程添加了“ WITH RECOMPILE”提示,但无济于事。
所以我很茫然……我现阶段正在考虑采用存储过程的代码并将其作为嵌入式查询运行,但这不是最佳实践。 我们也正在将该项目移交给另一家公司,所以我不想离开他们(我感到很自豪)。