次のようなものを使用できます:
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)
Paramが0の場合、最初の条件は0=0
になります。 すべての行に一致するため、すべての行が返されます。 paramが1または2の場合、最初の条件ではそれぞれまたはブランチのみが一致するため、2番目の条件で指定されているものが返されます。
また、option (recompile)
本当に重要です(マーティンのコメントの記事を参照してください)。実行プランを準備するときにパラメータの実行時の値を使用するようにSQLサーバーに指示するため、基本的に次のようになります。
- @Param =0の場合、クエリは
select * from @Accessories
になります。 - @Param =1の場合、クエリは
select * from @Accessories where atype = 'HDD'
になります。 - @Param =2の場合、クエリは
select * from @Accessories where atype != 'HDD'
になります。