查询在ssms中工作,但在ssrs中不起作用

时间:2018-05-12 22:32:02

标签: sql sql-server ssms ssrs-2012

所以我遇到的问题让我感到非常困惑。我有一个使用带有4个参数的查询的数据集。用户可以为不同的参数选择常规选项,除了一个选项是' ALL'如果用户选择将选择一切。

我运行SSRS报告,出于某种原因只在用户选择的一个参数上运行ALL'它不返回任何记录,只是一个空白表。我尝试在SSMS上的数据集后面重新创建相同的查询并输入' ALL'同一个问题参数中的选项,它返回我希望看到的所有记录。

查询:

Declare @workingParam1 as varchar(200)
Declare @workingParam2 as varchar(50)
Declare @workingParam3 as varchar(50)
Declare @problemParam as varchar(50) -- this one is giving me problems only 
                                     -- if I choose ' ALL'


SELECT        Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9
FROM            View
WHERE        
(Col1 = @problemParam OR @problemParam = ' ALL') And 
(Col2 = @workingParam1 OR @workingParam1  = ' ALL') And
(Col3 = @workingParam2 OR @workingParam2 = ' ALL') And 
(Col4 = @workingParam3 OR @workingParam3 = ' ALL')
ORDER BY Col1, Col2, Col3

谢谢!

1 个答案:

答案 0 :(得分:3)

我相信您的SSRS报告中有一个多选参数。当您从ssrs报告中的参数下拉列表中选择ALL时,它不会向您的t-sql查询传递文字字符串All的值,但它会将所有值传递给您的t-sql逗号分隔列表,'1,2,3,4'

现在您必须对T-SQL代码进行更改,因此它可以处理以逗号分隔列表形式传递的参数。

Stack Overflow上有很多关于此问题的问题。

或者,您可以创建on Select All值以显示在参数下拉列表中,然后才能使用您在当前查询中使用的逻辑,但即使这样,我也会使用类似......的内容。 / p>

WHERE (ColumnName = @Param OR @Param = 'All') 

这将获得您想要的结果,但如果您希望从t-sql代码获得更好的性能,请使用数据集的存储过程,并使用动态sql在用户通过时完全过滤掉Where子句All参数。

这个简短的答案中有很多信息,还有很多谷歌搜索你要做的事情:)