我们可以在SSRS数据集中传递动态查询吗?

时间:2016-06-29 05:12:46

标签: sql-server reporting-services

我创建了一个包含三个参数的SSRS报告 - 两个必需参数,第三个是搜索参数,还允许空白/空值。 我已经做了一个动态查询来处理该搜索参数的三种情况

1.) Display records without passing value in Third parameter i.e. NULL value.
2.) Display records by passing single value in Third parameter.
3.) Display records by passing multiple values in Third parameter.

我正在使用以下查询:

 IF (@Parameter3 = '')
 BEGIN
 EXEC('SELECT  * FROM [TblName] with(nolock)
 where [Col1] in ('+@Parameter1+') and [Col2] in ('+@Parameter2+')
 ') 
 END 
 ELSE
BEGIN 
EXEC ('SELECT  * FROM [TblName] with(nolock)
where [Col1] in ('+@Parameter1+') and [Col2] in ('+@Parameter2+') and [Col3]  ('+@Parameter3+')  
')
END

现在当我在传递上述三个不同的场景后在sql server中执行此查询时,它会根据传递的参数给出结果,但是当我尝试在报表数据集中添加它时,它会给出错误 - enter image description here 可以将动态查询添加到SSRS中的数据集中吗?

1 个答案:

答案 0 :(得分:0)

你的SQL在Col3之后缺少一个IN子句。

IF (@Parameter3 = '')
BEGIN
    EXEC('SELECT  * FROM [TblName] WITH (NOLOCK)
    where [Col1] in ('+@Parameter1+') and [Col2] in ('+@Parameter2+')
    ') 
END 
ELSE
BEGIN 
    EXEC ('SELECT  * FROM [TblName] WITH (NOLOCK)
    where [Col1] in ('+@Parameter1+') and [Col2] in ('+@Parameter2+') and [Col3] in ('+@Parameter3+')  
    ')
END

在不知道任何有关参数的数据类型的情况下,这应该可行。当在参数中选择多个值时,预计会出现问题。

我不确定SQL是否需要是动态的。下面的代码也可以正常工作。

IF (@Parameter3 = '')
BEGIN
    SELECT  * FROM [TblName] WITH (NOLOCK)
    WHERE [Col1] IN (@Parameter1) 
    AND [Col2] IN (@Parameter2) 
END 
ELSE
BEGIN 
    SELECT  * FROM [TblName] WITH (NOLOCK)
    WHERE [Col1] IN (@Parameter1) 
    AND [Col2] IN (@Parameter2) 
    AND [Col3] IN (@Parameter3) 
END
祝你好运!