Sql server 基于SSRS参数值的动态查询

Sql server 基于SSRS参数值的动态查询,sql-server,tsql,reporting-services,Sql Server,Tsql,Reporting Services,我有一个返回一组值的过程。我有一个基于值显示或隐藏列的工具 我的存储过程select查询如下所示: 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.

我有一个返回一组值的过程。我有一个基于值显示或隐藏列的工具

我的存储过程select查询如下所示:

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 
如何更改存储过程以接受一个可以有多个值的参数,并将查询更改为在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

您可以使用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)

你试过top1吗?