【问题标题】:Display date in SSRS report header when t-sql resultset is empty当 t-sql 结果集为空时,在 SSRS 报告标题中显示日期
【发布时间】:2016-05-31 00:52:57
【问题描述】:

我有一个简单的 SSRS 报告,它由两部分组成:详细信息部分和标题部分。标题有标题,细节有存储过程结果集。

报告调用存储过程 dbo.usp_GetChanges,如下所示:

create procedure dbo.usp_GetChanges
as 

declare @Date int

select top 1 @Date = datekey
from DatesProcessed order by DatesProcessedid desc

select RunDate, OldName, NewName from EmployeeLog
where RunDate = @Date

如果最后一次运行日期是 20150215,那么结果如下所示:

20150215    Joe    John
20150215    Mary   Marie
20150215    Bob    Bobo

对于 SSRS 标头,我使用 SP 的结果集来填充标题。所以当天报告的标题是:Changes for 20150215

但是假设在报告运行的那一刻,没有进行任何更改,因此 SP 没有返回任何内容。是否可以使用相同的存储过程返回 @Date?

我知道有几种方法可以解决这个问题(即子报告、另一个 SP 等);我正在寻找可以集成到这个存储过程中的解决方案。

我正在考虑向 SP 添加一个 OUTPUT 变量(即@Date datetime OUTPUT),但 SSRS 将其解释为输入参数。我尝试将其隐藏在 SSRS 中,但它要求我提供参数值,即使它没有用于此目的。

谢谢。

【问题讨论】:

    标签: sql-server tsql stored-procedures reporting-services ssrs-2008


    【解决方案1】:

    在存储过程中检查选择是否返回行。如果是,则返回选定的行,否则选择日期。

    IF NOT EXISTS(
      select RunDate, OldName, NewName from EmployeeLog
      where RunDate = @Date)
    BEGIN
      select @Date RunDate
    END
    ELSE
      select RunDate, OldName, NewName from EmployeeLog
      where RunDate = @Date) 
    

    如果这有帮助,请告诉我

    【讨论】:

    • IF NOT EXISTS 能否与公用表表达式 (CTE) 一起使用?
    • 您可以在 FROM 子句from cte 中使用它。但如果您的意思是在 IF NOT EXISTS 中声明 CTE,请检查 this
    • 它或多或少都有效。它修复了标题中的日期问题,但 SSRS 表显示一个空行,因为从技术上讲,查询返回 一行。但这是一个足够好的解决方案。
    • 如果我的回答有帮助,您可以投票或选择它作为正确答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多