Můžete použít něco takového:
select *
from @Accessories
where (@Param = 0)
or (@Param = 1 and atype = 'HDD')
--or (@Param = 1 and itype = 1) , if itype and atype are connected
or (@Param = 2 and atype != 'HDD')
option (recompile)
Pokud je Param 0, první podmínka se stane 0=0
a odpovídá pro všechny řádky, takže jsou vráceny všechny řádky. Pokud je parametr 1 nebo 2, odpovídá první podmínce pouze příslušná větev, takže vrací to, co určuje druhá podmínka.
Také option (recompile)
je opravdu důležité (viz článek v Martinově komentáři). Instruuje SQL server, aby použil runtime hodnoty parametrů při přípravě plánu provádění, takže v podstatě:
- když @Param =0, dotaz se změní na
select * from @Accessories
- když @Param =1, dotaz se změní na
select * from @Accessories where atype = 'HDD'
- když @Param =2 se dotaz změní na
select * from @Accessories where atype != 'HDD'