Größer als in SQL CASE-Anweisung
Ich habe eine harte Zeit, herauszufinden, eine größer als in einer SQL-Anweisung.
Hier ist mein code:
select one, two three from orders
where case when @orderid > 0 then orders.orderid = @orderid end
@orderid parameter an die gespeicherte Prozedur übergeben. Die Idee ist, dass, wenn eine gültige (> 0) Bestell-NR übergeben wird, verwenden Sie dann als filter in der where-Klausel, sonst nutzen Sie nicht alle.
InformationsquelleAutor der Frage IIS7 Rewrite | 2013-09-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Guffa hat die richtige Antwort, aber die Art und Weise würden Sie dies tun, indem Sie den FALL trick (die allerdings gelegentlich in handliches kommen) ist diese:
FALL immer wieder etwas, wenn Sie so wollen, zu "deaktivieren" - eine Aussage, die in Ihrer WHERE-Klausel bedingt und kann nicht verwenden ODER Sie können einfach legen Sie die Sache gleich selbst, und das sollte immer true (außer beim Vergleich von null-Werten).
Edit: ich sollte auch sagen, dass auf Anfragen wie diese, in denen die Anzahl der Zeilen, die zurückgegeben werden kann, könnte stark variieren (eine Zeile und die gesamte Tabelle), mit der OPTION (RECOMPILE) - Hinweis kann helfen, Leistung eine Menge in der single-row-Fall.
InformationsquelleAutor der Antwort NYCdotNet
NYCDotnet Antwort, wie der rest der Antworten hier funktioniert, aber Sie können nicht SARGable
Machen diese non-SARGable Abfragen..
..SARGable, tun Sie dies:
Falls @orderid nicht immer negativ, nur damit die Lösung einfacher:
Oder besser noch, also falls @orderid nicht negativ werden:
InformationsquelleAutor der Antwort Michael Buen
Können Sie nicht verwenden Sie eine Bedingung, wie Sie einen Wert in das
case
Ausdruck.Können Sie einfach die
or
Betreiber, um den Zustand unbenutzt für ungültige Werte:InformationsquelleAutor der Antwort Guffa
Brauchen Sie nicht zu verwenden
CASE
hier. Gleiche Logik, re-arrangiert ein wenig:InformationsquelleAutor der Antwort dana
In der Tat, da die id ist ein int und wenn es eine identity-Spalte wird es immer größer als null sein, so dass Sie tun nicht wirklich brauchen, um die Mühe zu überprüfen, ob die @orderid ist größer als null. Das sagte der obige code halten wird die query ausgeführt mit eine ungültige Bestell-id.
Könnten Sie auch tun, es auf diese Weise
InformationsquelleAutor der Antwort jcwrequests