Vissa människor använder den här tekniken
... WHERE @itemid IS NULL OR tbl.itemid = @itemid
Det garanterar dock att du aldrig kommer att få en indexsökning i kolumnen itemid.
Ett bättre tillvägagångssätt om tabellen överhuvudtaget är stor är att dela upp frågan i två separata fall
IF(@itemid IS NULL)
SELECT foo FROM bar
ELSE
SELECT foo FROM bar WHERE itemid = @itemid
Om antalet kombinationer är för stort kan du överväga dynamisk SQL. Se till att du förstår SQL-injektion först.
Ref:Dynamiska sökvillkor i T-SQL