我有一个名为@vConsultant的参数,我在存储过程和SSRS报告中使用它。该参数是此查询填充的下拉菜单:
select distinct c.nameConsultant
from dataTable d
left join consultants c on d.nameConsultant= d.recID
“dataTable”是我的主数据表,用于存储顾问的ID。顾问是存储名称的表。
问题:在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中选中“允许空”和“允许空白”复选框,但这也不起作用。
如果需要进一步澄清,请与我们联系。谢谢!
答案 0 :(得分:0)
单击vConsultant参数的参数属性并选中“允许空值”属性,然后单击“确定”。它将在报告参数中显示一个复选框,以选择值是null还是选定值。
答案 1 :(得分:0)
要解决多值下拉列表中的空值问题,我包含一个名为“ - Optional - ”的选项,然后在where子句中使用它而不是检查null。
所以你的第一个查询变为(改为内连接以确保没有空值):
select '-- Optional --'
union
select distinct c.nameConsultant
from dataTable d
inner join consultants c on d.nameConsultant= d.recID
并用以下代码替换过程中的where子句:
Where
@vConsultant != '-- Optional --' Or @vConsultant Like '%,' + i.firstName + ' ' + i.lastName + ',%')