FALL-syntax in einer WHERE-Klausel auf MSSQL
Habe ich die folgende SQL-syntax auf MSSQL
SELECT
id,
firstName,
lastName
FROM
Person
WHERE
((CASE WHEN @Filter = 'firstName' THEN @Value END) = firstName ) or
((CASE WHEN @Filter = 'lastName' THEN @Value END) = lastName )
Es funktioniert, aber ich weiß nicht, ob es eine bessere und effizientere Methode, dies zu tun.
Vielen Dank im advanceName
Das sollte kompilieren, aber ich glaube nicht, dass es das tut, was Sie will es auch... Ist da ein @Name-parameter übergeben wird, in Ergänzung zu @Filter?
Sorry, ich habe gerade fix der SQL-Syntax
Sorry, ich habe gerade fix der SQL-Syntax
InformationsquelleAutor roncansan | 2011-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies kann kompilieren, aber es scheint wie etwas fehlt.
@Filter
offenbar stellt die Feld du bist filtern, und man würde erwarten, um zu sehen, eine Wert zu prüfen, gegen das Feld, wie soWenn dies Ihre Absicht, dann nur eine
CASE
Ausdruck ist erforderlich, unabhängig von der Anzahl der möglichen filter-Feldern.So oder so, die
CASE
Aussage ist sehr effizient. SQL-Server sehen Sie, dass dieWHEN
Ausdrücke vergleichen, die Skalare Werte entsprechend anzupassen und zu optimieren (in anderen Worten, der Wert von@Filter
muss nicht neu bewertet werden für jede Zeile).OPTION (RECOMPILE)
verwendet wird und die OP ist mindestensSQL 2008 SP1 CU5 (10.0.2746)
oderSQL 2008 R2 CU1 (10.50.1702)
(Versionsnummern von hier aus sommarskog.se/dyn-search-2008.html BTW)danke für den Hinweis. Gibt es eine bessere Möglichkeit, dies zu schreiben, für die früheren Versionen?
splitten in 2 Fällen mit einem
UNION ALL
sollte besser funktionieren für diejenigen, die (Eine Idee hab ich aus dieser Antwort gestern stackoverflow.com/questions/5754619/sql-where-myid-any/...)InformationsquelleAutor harpo
In diesem Beispiel müssen Sie nicht wirklich brauchen
CASE
überhaupt.AND
undOR
schneller laufen:InformationsquelleAutor krubo