我需要为数据库创建一个查询过滤结果,如下所示:
[ProjectNumber] LIKE
CASE WHEN IsNull(@ProjectId,'') = '' THEN
'%'
ELSE
@ProjectId + '%'
END
AND
[CountryCode] LIKE
CASE WHEN IsNull(@Country,'') = '' THEN
'%'
ELSE
@Country + '%'
END
当两个变量都有值时,一切正常,但如果@Country为null,则此查询返回CountryCode列中有值的所有结果,并且我需要返回all(即使该字段为Null)。任何人都知道如何在返回所有字段的null变量的情况下编写此查询(带有值的字段和带有null的字段)?
答案 0 :(得分:2)
您可以执行以下操作,而不是使用CASE ... WHEN ...
和ISNULL
功能:
...
(@ProjectId IS NULL OR [ProjectNumber] LIKE @ProjectId + '%')
AND
(@Country IS NULL OR [CountryCode] LIKE @Country + '%')
...
答案 1 :(得分:1)
您只需使用
即可ProjectNumber LIKE IsNull(@ProjectId,'') + '%' AND
CountryCode LIKE IsNull(@Country,'') + '%'
答案 2 :(得分:0)
您不需要使用案例陈述。试试以下内容:
ISNULL([ProjectNumber],'') LIKE IsNull(@ProjectId,'')+'%'
AND
ISNULL([CountryCode],'') LIKE ISNULL(@Country,'') + '%'
因为你的案例陈述都会产生同样的效果。