Niektórzy używają tej techniki
... WHERE @itemid IS NULL OR tbl.itemid = @itemid
Gwarantuje to jednak, że nigdy nie otrzymasz wyszukiwania indeksu w kolumnie itemid.
Lepszym rozwiązaniem, jeśli tabela jest w ogóle duża, jest podzielenie zapytania na 2 oddzielne przypadki
IF(@itemid IS NULL)
SELECT foo FROM bar
ELSE
SELECT foo FROM bar WHERE itemid = @itemid
Jeśli liczba kombinacji jest zbyt duża, możesz rozważyć dynamiczny SQL. Upewnij się, że najpierw rozumiesz wstrzykiwanie SQL.
Ref:Warunki wyszukiwania dynamicznego w T-SQL