所以我遇到的问题让我感到非常困惑。我有一个使用带有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
谢谢!
答案 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
参数。
这个简短的答案中有很多信息,还有很多谷歌搜索你要做的事情:)