Cars 是一个具有 CarType 列的表。CarType 是非空的,可以包含 2 个值。CarDonated 和 CarSold。
我们从报告中传入一个参数以包含所有 CarType 或特定的 CarType(例如 CarDonated)。
场景 1 中的参数传入“Car”(对于所有 CarTypes)、“CarD”用于 CarDonated、“CarS”用于 CarSold。
select *
from Cars c
where c.CarType like @CarTypeParam + '%'
或者
场景 2 中的参数传入 '0'(适用于所有 CarTypes)、'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)