Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Clausola condizionale Check in Where

Alcune persone usano questa tecnica

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

Garantisce tuttavia che non otterrai mai una ricerca dell'indice sulla colonna itemid.

Un approccio migliore se la tabella è grande è dividere la query in 2 casi separati

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

Se il numero di combinazioni è troppo grande, puoi prendere in considerazione l'SQL dinamico. Assicurati di aver prima compreso SQL injection.

Rif:Condizioni di ricerca dinamica in T-SQL