我有一个返回一组值的过程。我有一个SSRS Parameter,它会根据值显示或隐藏列。
我的存储过程选择查询如下所示:
SELECT DISTINCT
t1.Col1,
t2.Col1
FROM
Table1 t1
INNER JOIN Table2 t2
ON t1.ID = t2.ID
WHERE
t1.col1 LIKE '%SomeValue%' OR
t2.col1 LIKE '%SomeValue%'
结果集为:
t1.Col1 | t2.Col1
a | d
a | e
a | f
问题是,即使报表中未选中复选框,存储过程仍会显示多条记录,如下所示:
在报告参数中取消选中Col2:
t1.Col1
a
a
a
如何更改存储过程以接受可具有多个值的1个参数并更改查询以从SELECT和WHERE语句添加/删除列?
因此,如果Col2未被攻击,则存储过程可能类似于:
SELECT DISTINCT
t1.Col1
FROM
Table1 t1
INNER JOIN Table2 t2
ON t1.ID = t2.ID
WHERE
t1.col1 LIKE '%SomeValue%'
并返回:
t1.Col1
a
答案 0 :(得分:0)
你可以使用EXECUTE
DECLARE @sql VARCHAR(max)
set @sql='SELECT '+ CASE WHEN @param2 IS NOT NULL THEN 't2.Col1' ELSE '' END +' FROM t1'+
CASE WHEN @param2 IS NOT NULL THEN 'INNER JOIN Table2 t2 ON t1.ID = t2.ID' ELSE '' END
EXECUTE( @sql)