Carsは、CarType列を持つテーブルです。CarTypeはnullではなく、2つの値を含めることができます。CarDonatedおよびCarSold。
レポートからパラメータを渡して、すべてのCarTypeまたは特定のCarType(CarDonatedなど)を含めます。
シナリオ1のパラメーターは、「Car」(すべてのCarType)、「CarD」(CarDonated)、「CarS」(CarSold)のいずれかを渡します。
select *
from Cars c
where c.CarType like @CarTypeParam + '%'
また
シナリオ2のパラメーターは、「0」(すべてのCarType)、「CarDonated」、「CarSold」を渡します。
select *
from Cars c
where c.CarType = case when @CarTypeParam = '0'
then c.CarType
else @CarTypeParam
end
どのシナリオ/コーディング方法が優れていますか?where句でcaseステートメントを使用することにあまり慣れていません。オプティマイザーは、両方のシナリオでCarTypeのインデックスを引き続き使用できますか?どちらがより適切にコーディングされていますか?
SQL Server 2008 R2(およびSSRS)