2 Stimmen

Verwendung von Parametern in gespeicherten Prozeduren, bei denen die Spalte null sein kann

Ich möchte (lose) eine gespeicherte Prozedur haben wie

select * from table where col1 like @var

der Standardwert von @var ist "%", wenn ich also keinen Wert für @var habe, sollte jede Zeile zurückgegeben werden. Das Problem ist jedoch, dass keine Zeilen zurückgegeben werden, in denen col1 Null ist.

Wie gebe ich alle Zeilen zurück, wenn @var = '%' ist, und Zeilen, die wie @var sind, wenn es einen Wert hat?

(die eigentliche sp ist wesentlich komplexer, so dass ich sie nicht einfach in ein if..then verpacken und zwei Selects haben möchte)

3voto

roufamatic Punkte 17707
select * from table where isnull(col1, '') like @var

Das sollte genügen.

1voto

CResults Punkte 5071

Nur eine Vorwarnung, mehr als alles andere. Wenn dieser SP häufig verwendet werden soll und die Daten, aus denen Sie auswählen, groß sind, stellen Sie sicher, dass Sie Ihre Abfrage Leistungstest (mit einer der oben genannten Lösungen). Erfahrungsgemäß kann die Verwendung von LIKE und ISNULL oder IS NULL zusammen einen großen Leistungseinbruch zur Folge haben.

0voto

Adam Hughes Punkte 3604

Sie können einen Sonderfall einführen, wenn @var ist '%', um so alle Nullwerte einzuschließen:

select * from table where col like @var or (@var = '%' and col is null)

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