基于SSRS参数值的动态查询

时间:2015-11-30 05:29:47

标签: sql-server tsql reporting-services

我有一个返回一组值的过程。我有一个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

1 个答案:

答案 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)