2017-07-19 81 views
0

我試圖編寫一個查詢,該查詢具有可選的輸入參數。如果該參數留空,我必須從表中選擇每條記錄。如果該參數不是空的,我只能通過它提供的值進行過濾。我的想法是使用CASE聲明,但由於某種原因,無論我放入@list變量,我都會得到空結果集。任何更好的想法?在WHERE子句中使用不同場景的SQL語句

SELECT * FROM my_tables 
WHERE column_one IN (
    CASE 
     WHEN LEN(@list) > 0 THEN @list 
     ELSE (SELECT column_one FROM my_table) END 
) 
+2

Case _expression_。 – jarlh

+2

在WHERE和ON子句中使用AND/OR而不是CASE通常更好。 – jarlh

+0

我有一個類似的問題。請檢查我在這裏得到的回覆https://stackoverflow.com/questions/25872970/where-clause-selecting-term-codes –

回答

0

試試這個代碼:

SELECT * FROM my_tables 
WHERE 
    (LEN(@list) > 0 AND column_one = @list) 
    OR (LEN(@list) = 0 AND column_one IN (SELECT column_one FROM my_table)) 
1

寫2個不同的SQL兩個情況和UNION他們。只有一個查詢會提供結果,另一個將始終提供空結果集。類似這樣的:

SELECT * FROM my_tables 
WHERE LEN(@list) > 0 and column_one IN (@list) 

UNION 

SELECT * FROM my_tables 
WHERE LEN(@list) = 0 and column_one IN (SELECT column_one FROM my_table)