SSRS 2008:对布尔值执行数据集

SSRS 2008: Execute dataset on boolean value

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

=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" , " ")

这是我发布这份报告的最后一件事,我已经花了整整一周的时间来完成这份报告。请暂停!

您遇到的问题是 SSRS 期望数据集始终具有相同的数据结构 returned,如果您不执行查询,那么在您实际需要时什么都不会 returned是一个空数据集。

2 种基本方法。

首先你可以修改存储过程,(你可能必须给它传递一个额外的参数来阻止执行)然后 return 没有结果。

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

我会将我的数据集查询更改为类似这样的内容...

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

注意:你可以根据结果的大小等将table变量换成临时table,但原理是一样。