Sql server Reporting Services中的简单存储过程调用不返回任何数据,但查询有效

Sql server Reporting Services中的简单存储过程调用不返回任何数据,但查询有效,sql-server,reporting-services,Sql Server,Reporting Services,我在SSRS 2014中有一份报告(在SharePoint 2013集成模式下,尽管我认为这并不重要),我有两份。一个副本在运行时运行以下查询,并按预期在报告中返回数据: exec reports.sp_evalquestions and answers@EngagementCode=N'Engagement1',@LabIDs=NULL,@StartDate='2013-08-01 00:00:00',@EndDate='2014-12-18 00:00:00',@UTCoffset=-6 第

我在SSRS 2014中有一份报告(在SharePoint 2013集成模式下,尽管我认为这并不重要),我有两份。一个副本在运行时运行以下查询,并按预期在报告中返回数据:

exec reports.sp_evalquestions and answers@EngagementCode=N'Engagement1',@LabIDs=NULL,@StartDate='2013-08-01 00:00:00',@EndDate='2014-12-18 00:00:00',@UTCoffset=-6

第二个副本在运行时运行以下查询,参数略有不同:

exec reports.sp_evalquestions and answers@EngagementCode=N'Engagement2',@LabIDs=NULL,@StartDate='2014-04-30 00:00:00',@EndDate='2014-12-19 00:00:00',@UTCoffset=-6

在ManagementStudio中运行这两个命令时,它们都会返回数百行,正如预期的那样。但是,虽然第一个报告按预期返回数据,但第二个报告显示了其中心tablix返回的
无行消息

我知道这些查询与我所展示的一样,因为我可以在SQL Profiler中看到它们

我甚至删除了第二个报告,复制了第一个报告,并更改了参数值(这是我所能看到的唯一更改,事实上这不是手动更改-它们来自报告本身的某些逻辑,基于报告在SharePoint中发布的位置),并产生了相同的结果。所以我知道我没有在报表生成器中破坏报表,因为我没有在报表生成器中触碰它

我既不相信也不符合我的情况,因为我没有任何多值参数


我还应该看什么呢?

经过大量调查后,发现有两件事正在发生:

  • 数据集的两个版本之间存在数据质量问题,其中存储过程中的计算字段在第二种情况下由于缺少数据而计算不正确,但在第一种情况下计算正确。这需要很长时间才能解决,因为要返回行,并且第一眼/第二眼/第三眼看上去是有效的

  • 报告tablix具有有效过滤第二个数据集中的虚假记录的过滤功能,导致“无行”结果


  • 我可以看到它们都在相同的模式下运行-数据库上下文相同吗?@Dave.Gugg我相信是的-SQL Profiler显示了在这两种情况下使用的相同数据库,具有相同的连接信息,以及调用的适当运行时间。在不起作用的报告中,triplequadruple检查以验证您已将tablix连接到正确命名的数据集。@TabAlleman谢谢您的回答。这两种情况下的报告完全相同,字面上是相同的RDL(在两个位置只有两份副本);我复制了它以确定。这是否可能是存储过程中的参数嗅探?其他应用程序是调用此存储过程还是仅用于此报告?我会重新考虑设计-在SP和SSRS代码之间拆分过滤逻辑似乎有问题(如您所描述的问题),而且效率也很低(SP返回SSRS然后丢弃的行)。一般来说,SSRS过滤器使用起来非常糟糕,最好避免使用。@MikeHoney我100%同意。这是重新设计操作的一部分,实际上是测试报告的替换版本。