2 Stimmen

Wie kann ich eine SQL-Anweisung so gestalten, dass sie alle Zeilen zurückgibt, wenn eine Variable leer ist, und ansonsten nur Übereinstimmungen zurückgibt?

Wie verwende ich eine SQL-Anweisung, um alle Zeilen zurückzugeben, wenn der Eingabeparameter leer ist, und ansonsten nur Zeilen, die übereinstimmen?

Mein SQL sieht folgendermaßen aus

where person.personstatusuid = @StatusUID
           AND person.forename != ''
           AND person.location = @Location

aber im Grunde will ich, dass person.location = @Location OR @Location is blank

Wie kann ich das tun? Vielleicht mit CASE WHEN...

2voto

Andomar Punkte 224164

Einfach OR verwenden?

where person.personstatusuid = @StatusUID
AND person.forename != ''
AND (person.location = @Location or IsNull(@location,'')='')

2voto

Quassnoi Punkte 396418
SELECT  *
FROM    mytable
WHERE   person.personstatusuid = @StatusUID
        AND person.forename != ''
        AND person.location = @Location
UNION ALL
SELECT  *
FROM    mytable
WHERE   person.personstatusuid = @StatusUID
        AND person.forename != ''
        AND @Location IS NULL

Diese Lösung, im Gegensatz zur Verwendung von OR ist indexfreundlich: Es optimiert die überflüssigen SELECT und verwenden Sie den Index.

In diesem Artikel in meinem Blog finden Sie ein ähnliches Problem mit Details zur Leistung:

(dies ist für MySQL aber anwendbar auf SQL Server ebenso gut)

1voto

Pete OHanlon Punkte 9009

Sie können eine einfache OR-Bedingung verwenden:

where person.personstatusuid = @StatusUID
           AND person.forename != ''
           AND (person.location = @Location OR @Location IS NULL)

1voto

Craig Punkte 1317

Wenn person.location keine Nullen zulässt, funktioniert auch das Folgende...

where person.personstatusuid = @StatusUID
AND person.forename != ''
AND person.location = isnull(@Location,person.location)

Dies setzt voraus, dass, wenn alle Zeilen erforderlich sind, @Standort als Null und nicht als leere Zeichenkette ('') übergeben wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X