2016-06-28 39 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 
     )