我有一个带有Wild Card搜索选项的报告,如下所示:
SELECT * FROM table
WHERE column1 LIKE '%'+ @param1 +'%' OR column2 LIKE '%'+ @param2 +'%'
但是如何下载列名,然后单个文本框进行搜索。我使用了这个,并将参数的默认值设置为每个可用值作为列名,但报告不返回任何结果。
SELECT * FROM table WHERE @columns LIKE '%'+ @param +'%'
有任何解决方法吗?
答案 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)
或者您可以尝试使用动态查询生成报告:
为报告的列参数创建数据集,类似于
从sys.columns中选择名称,其中object_id = OBJECT_ID('你的表')
将您的报告查询更改为动态查询,您可以通过tsql或仅使用报告服务表达式来完成。
但是当使用动态查询时,你需要考虑数据类型转换,显然,sql注入问题,因为该值将由最终用户输入。