0

我有一个名为 @vConsultant 的参数,我在存储过程和 SSRS 报告中使用它。该参数是由该查询填充的下拉菜单:

select distinct c.nameConsultant
from dataTable d

left join consultants c on d.nameConsultant= d.recID

“dataTable”是我的主要数据表,存储顾问的ID。Consultants 是存储名称的表。

问题:在dataTable中,顾问是一个可选字段。而且,在报告中,我的用户不仅希望看到他们在 SSRS 下拉列表中选择的顾问,还希望看到 NULL 值(用户没有指定顾问的地方)。但是,“NULL”不会作为值显示在 SSRS 的下拉菜单中。

在存储过程中,当我想返回 NULLS 时,我使用 where 子句。所以......我的过程是:

CREATE PROCEDURE [dbo].[spReportProc] 

@vConsultant varchar(max) 

AS


BEGIN
    --Get comma-delimited list of consultants to allow SSRS multi-value select.
    Select @vConsultant = ',' + @vConsultant + ','

    create table #Consultant
        (
            nameConsultant varchar(1000)
        )
    Insert Into #Consultant 
    Select  nameConsultant
    From consultants
    Where @vConsultant Like  '%,' + nameConsultant ',%'
    And classification = 'Implementation Consultant'
    Group By nameConsultant


    Select * From dataTable d

    left join consultants c on d.nameConsultant= d.recID


    Where 
    @vConsultant Is NULL Or @vConsultant Like '%,' + i.firstName + ' ' + i.lastName + ',%') 
END

但是以这种方式指定 NULL 并不会在 SSRS 中引起注意。有没有办法在 SSRS 中允许 NULL 值而不实际指定 NULL 作为 SSRS 下拉列表的一部分?我尝试在 SSRS 中选择“允许 Null”和“允许空白”复选框,但这也不起作用。

让我知道是否需要更多说明。谢谢!

4

2 回答 2

0

点击vConsultant参数的参数属性,勾选'Allow null value'属性,点击ok。会在report参数中显示一个复选框,选择该值是null还是选择值。

于 2012-07-31T16:17:09.370 回答
0

为了解决多值下拉列表中的空值问题,我包含了一个名为“-- 可选--”的选项,然后在 where 子句中使用它而不是检查空值。

因此,您的第一个查询变为(更改为内部联接以确保没有空值):

select '-- Optional --'
union
select distinct c.nameConsultant
from dataTable d

inner join consultants c on d.nameConsultant= d.recID

And replace the where clause in your procedure with:

Where 
    @vConsultant != '-- Optional --' Or @vConsultant Like '%,' + i.firstName + ' ' + i.lastName + ',%') 
于 2012-07-31T20:55:26.183 回答