首页 > 解决方案 > SSRS 2008:在布尔值上执行数据集

问题描述

目前使用布尔参数和一些自定义代码来检查至少一个用户可访问的参数是否有数据。如果这个布尔值是真的,我需要在我的一个数据集上运行一个存储过程,否则我希望它什么都不做,因为我有一个文本框用于显示错误,可见性设置为布尔值。

具有默认值的布尔参数

自定义代码

=Code.NoParameters(Parameters!StartDate.Value,Parameters!EndDate.Value,Parameters!ClientCode.Value(0))

Function NoParameters(StartDate as DateTime, EndDate as DateTime, ClientCode as String) As Boolean
Dim RetValue as Boolean
RetValue = "False"
If(StartDate = Nothing And EndDate = Nothing And ClientCode = Nothing)
RetValue = "True"
Else
RetValue = "False"
End If
Return RetValue
End Function

我尝试了一些变体

If IsEmpty = False EXEC sp_grand_smslog_processing

并且

iif (Parameters!IsEmpty.Value = False, "sp_grand_smslog_processing" , " ")

这是我发布这份我已经工作了整整一周的报告所需要的最后一件事。请哈普!

标签: reporting-servicesssrs-2008

解决方案


您遇到的问题是 SSRS 期望数据集始终返回相同的数据结构,如果您不执行查询,那么当您实际需要的是空数据集时,不会返回任何内容。

2 种基本方法。

首先,您可以修改存储的过程,(您可能必须向它传递一个阻止执行的附加参数),然后不返回任何结果。

但是,我可能会避免这种情况,因为这意味着必须修改您的存储过程,而您可能不想这样做,这也意味着您最终仍会运行存储过程。

我会将我的数据集查询更改为这些方面的内容......

DECLARE @SpResults TABLE(myCol1 int, myCol2 int etc....) -- <<-- This should match the output form your stored proc exactly.

IF @RunThis = 1 -- execute the SP and dump results into @SpResults table
    BEGIN
        INSERT INTO @SpResults
          EXEC myStoredProc
    END
-- finally return the table contents
-- The @RunTHis = 0 then the table will be empty, but still valid
SELECT * FROM @SpResults

注意:您可以根据结果的大小等将表变量换成临时表,但原理完全相同。


推荐阅读