2016-06-28 30 views
6

如果Make不等於'0',我只想使用where條件。這是我嘗試過的。這是存儲過程的一個片段。僅當Make不爲0時,查詢纔有效。當它爲0時,它將失敗。帶參數的情況下的表達式

這不是空檢查。 @Make是一個varchar。它是如何實現的,既可以是'0',也可以是一個字符串,例如'mazda'。

select * 
from In_Inventory 
where 
and Make = case 
when @Make != '0' 
Then @Make 
end 
+1

只是爲了自己的理解,這樣做的原因失敗是因爲你的情況只在make!= 0時返回一個值。如果Make爲0,那麼你的查詢只會讀取「和Make =」。再說一遍,這裏沒有理由使用案例。請參閱下面的更好的方法(例如使用OR)。 – Jens

回答

2

嘗試是這樣的

SELECT 
* 
FROM In_Inventory 
WHERE @Make = 0 
OR Make = @Make 
+0

感謝您的快速響應,但它不會在這種情況下工作。我需要的是,如果存儲過程中@Make變量的值等於「0」,則不會在make上過濾。如果該變量等於make上的其他任何過濾器。 「WHERE Make = 0」永遠不會被使用,因爲Make列是一個類似「mazda」等值的varchar等。 – JKerny

+0

@JeremyKern我剛剛更新了我的答案。如果@ Make = 0,那麼不要做任何事情,否則Make = @ Make。這是你在追求什麼? –

+0

這看起來是我所追求的。明天我回去工作時我會嘗試 – JKerny

1

您不能使用case表達式返回語法元素(如where條款),只值。但是,你可以得到相同的行爲用一個簡單的in條件:

SELECT * 
FROM In_Inventory 
WHERE @Make IN ('0', Make) 
1

試試這個,

SELECT 
* 
FROM In_Inventory 
WHERE @Make = 0 
OR Make = @Make 
1

嘗試這樣,

SELECT * 
FROM In_Inventory 
WHERE (
     Make = 0 
     OR Make = @Make 
     )