2016-06-28 10 views
6

Ich möchte nur die WHERE-Bedingung verwenden, wenn Make nicht gleich '0' ist. Das habe ich ausprobiert. Dies ist ein Ausschnitt aus dem gespeicherten Proc. Die Abfrage funktioniert nur, wenn Make nicht 0 ist. Wenn sie 0 ist, schlägt sie fehl.Case-Ausdruck mit einem Parameter schlägt fehl

Dies ist kein Null-Check. @Make ist ein Varchar. Wie es implementiert wird, ist entweder '0' oder es wird eine Zeichenfolge sein, z.B. 'Mazda'.

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

Nur für dich deines eigenen Verstandes, der Grund dieser fails ist, weil Ihr Fall nur einen Wert zurückgibt, wenn make! = 0 ist. Wenn Make 0 wäre, würde Ihre Abfrage nur "und Make =" lesen. Andererseits gibt es keinen Grund, hier einen Fall zu verwenden. Siehe unten für bessere Ansätze (z. B. Verwenden eines OR). – Jens

Antwort

2

so etwas wie dieses

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

Danke für die schnelle Antwort, aber es wird in diesem Szenario nicht funktionieren. Was ich brauche, ist, wenn der Wert, der in der @Make-Variable in dem gespeicherten Proc kommt, gleich '0' ist, nicht nach make filtern. Wenn die Variable einem anderen Wert entspricht, filter auf make. "WHERE Make = 0" würde niemals verwendet werden, da die Make-Spalte ein varchar mit Werten wie "mazda" usw. ist. – JKerny

+0

@ JeremyKern Ich habe gerade meine Antwort aktualisiert. Wenn @ Make = 0, dann tu nichts, sonst Make = @ Make. Ist es das wonach du suchst? –

+0

Das sieht nach was ich bin. Ich werde es versuchen, wenn ich morgen wieder bei der Arbeit bin – JKerny

1

Versuchen Sie nicht case Ausdruck syntaktische Elemente zurückzukehren (wie eine where Klausel) können nur Werte. Sie können jedoch das gleiche Verhalten mit einem einfachen in Zustand erhalten:

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

die Sie interessieren,

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

wie diese versuchen,

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