2013-02-04 47 views
0

我正在開發一個報告,該報告應根據用戶指定的參數返回結果。有3個報告參數,其中一個是帶有'位置'的下拉菜單,另外兩個是在'user_id'和用戶的名字或姓氏中搜索的文本參數。這是我目前正在使用:SSRS - 優化WHERE T-SQL查詢中的條件

SELECT * 
FROM UserTable1 
WHERE Location = @Location 
AND (user_id LIKE '%'[email protected]+'%' 
AND first_name LIKE '%'[email protected]+'%' 
OR last_name LIKE '%'[email protected]+'%') 

如果@SearchUserID參數字段留空用戶,所有user_ids應退(符合其他2個參數)。如果指定,它將返回在user_id中具有該子字符串的user_id。對於@SearchUserName參數字段也是如此。如果留空,則應返回符合其他參數的所有用戶。如果指定,它應該返回所有在其first_name或last_name中具有該子字符串的用戶(但只有符合其他參數的結果)。如果兩者都留空,則應返回所有用戶。

我上面的查詢不起作用。它似乎只返回滿足@SearchUserName參數的結果,但忽略@SearchUserID參數。有沒有辦法來解決這個問題?我已經把@SearchUserID過濾器上表矩陣本身,使用表達式: =「‘&參數SearchUserID.Value &’」 但是,這導致了嚴重的阻礙性能..

回答

2

試試這個。如果參數爲空(空),則必須通過NULL

SELECT * 
FROM UserTable1 
WHERE Location = @Location 
AND (user_id LIKE '%'[email protected]+'%' 
     OR @SearchUserID IS NULL 
    ) 
AND (first_name LIKE '%'[email protected]+'%' 
     OR last_name LIKE '%'[email protected]+'%' 
     OR @SearchUserName IS NULL 
    ) 

「....但忽略@SearchUserID參數。」什麼數據類型的user_id

+0

感謝哈姆雷特,這工作完美。這些字段是varchars。 – dp3