Sql server 基于SSRS参数值的动态查询
我有一个返回一组值的过程。我有一个基于值显示或隐藏列的工具 我的存储过程select查询如下所示: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 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吗?