2016-03-29 40 views
0

我有如下這通配符搜索選項的報告工作正常:SSRS創建下拉列表中搜索選項

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

但如何有一個下拉列名,然後一個文本框搜索。我使用了這個參數,並將參數的每個可用值的默認值設置爲列名稱,但報表不返回任何結果。

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

任何解決方法?

回答

0

我能想到的唯一方法就是擁有所有可能性,並獲得所有(如果該列不是選擇過濾的列)。

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 
0

或者您可以嘗試使用動態查詢生成報告:

  1. 創建報表的列參數的數據集,從SYS.COLUMNS像

    選擇名稱,其中OBJECT_ID = OBJECT_ID(「你的表」)

  2. 改變你的報表查詢到動態查詢,可以通過tsql來完成,或者只需使用報告服務表達式。

但是,當使用動態查詢時,您需要考慮數據類型轉換,顯然,sql注入問題,因爲值將由最終用戶輸入。