我需要检查三个条件:
if @filter = 1
{
select * from employeestable where rating is not null
}
else if @filter = 2
{
select * from employeestable where rating is null
}
else
{
select * from employeestable
}
我需要使用case语句。现在我有超过30行查询,如果我使用案例我可以减少我的代码高达70%
请现在告诉我,我该怎么办呢。
答案 0 :(得分:6)
这个怎么样?
WHERE (@filter = 1 AND rating IS NOT NULL)
OR (@filter = 2 AND rating IS NULL)
OR (@filter <> 1 AND @filter <> 2)
答案 1 :(得分:2)
将代码减少70%很不错,但使用索引是使查询运行良好的唯一方法。阅读这篇文章:Dynamic Search Conditions in T-SQL by Erland Sommarskog,。有许多方法可以获得动态搜索条件,每种方式都有自己的微妙性能折衷。如果您担心多次重复查询的大部分内容,请考虑将其替换为视图。
答案 2 :(得分:0)
你可以利用位逻辑。
测试数据
DECLARE @employeestable TABLE (rating INTEGER)
INSERT INTO @employeestable
SELECT NULL
UNION ALL SELECT 99
DECLARE @filter INTEGER
SET @filter = 3
SQL声明
SELECT *
FROM (
SELECT Filter = CASE WHEN rating IS NULL THEN 2 ELSE 1 END
, *
FROM @employeestable
) et
WHERE et.Filter & @filter = et.filter