Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bedingte Check-in-Where-Klausel

Einige Leute verwenden diese Technik

... WHERE @itemid IS NULL OR tbl.itemid = @itemid

Es garantiert jedoch, dass Sie niemals eine Indexsuche in der itemid-Spalte erhalten.

Ein besserer Ansatz, wenn die Tabelle überhaupt groß ist, besteht darin, die Abfrage in zwei separate Fälle aufzuteilen

IF(@itemid IS NULL)
  SELECT foo FROM bar
ELSE
  SELECT foo FROM bar WHERE itemid = @itemid

Wenn die Anzahl der Kombinationen zu groß ist, können Sie dynamisches SQL in Betracht ziehen. Stellen Sie sicher, dass Sie zuerst die SQL-Einschleusung verstehen.

Siehe:Dynamische Suchbedingungen in T-SQL