ssrs为搜索选项创建下拉列表

时间:2016-03-29 19:06:57

标签: reporting-services ssrs-2012

我有一个带有Wild Card搜索选项的报告,如下所示:

SELECT * FROM table 
WHERE column1 LIKE '%'+ @param1 +'%' OR column2 LIKE '%'+ @param2 +'%'

但是如何下载列名,然后单个文本框进行搜索。我使用了这个,并将参数的默认值设置为每个可用值作为列名,但报告不返回任何结果。

SELECT * FROM table WHERE @columns LIKE '%'+ @param +'%'

有任何解决方法吗?

2 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是拥有所有可能性并获得ALL(使用OR<>),如果该列不是选择过滤的那一列。

SELECT * FROM table 
WHERE (column1 LIKE '%'+ @param1 +'%' OR @COLUMNS <> 'COLUMN1')
OR (column2 LIKE '%'+ @param1 +'%' OR @COLUMNS <> 'COLUMN2')
...

您可以在数据集上添加计算字段(名为PARAMETER_COLUMN)并在SSRS中对其进行过滤:

=IIF(Parameters!COLUMNS.Value = "COLUMN1", Fields!column1.Value, 
 IIF(Parameters!COLUMNS.Value = "COLUMN2", Fields!column2.Value, 
 IIF(Parameters!COLUMNS.Value = "COLUMN3", Fields!column3.Value, Fields!column4.Value)))

然后过滤计算字段:

Expression: Fields!PARAMETER_COLUMN.Value
Value: Parameters!param1.Value

答案 1 :(得分:0)

或者您可以尝试使用动态查询生成报告:

  1. 为报告的列参数创建数据集,类似于

    从sys.columns中选择名称,其中object_id = OBJECT_ID('你的表')

  2. 将您的报告查询更改为动态查询,您可以通过tsql或仅使用报告服务表达式来完成。

  3. 但是当使用动态查询时,你需要考虑数据类型转换,显然,sql注入问题,因为该值将由最终用户输入。