在我的网站中,我有一个字段用于按名称,邮政编码,guid等进行搜索。现在它仅适用于名称。我写了一个简单的查询
where (funeral_home_name like CONCAT('%', @searchFilter ,'%')) OR (funeral_home_zip5 like CONCAT('%', @searchFilter, '%'));
它工作正常,但是我需要将此代码插入带有'case'语句的存在过程中
where funeral_home_name like case when @searchFilter != '' then CONCAT('%',@searchFilter,'%') else '%' end ...
那我该怎么做?
答案 0 :(得分:1)
您必须像下面这样分别编写每个OR
条件。您无法像使用IN
where (funeral_home_name like CONCAT('%',@searchFilter,'%')
or funeral_home_zip5 like CONCAT('%',@searchFilter,'%')
or [guid] like CONCAT('%',@searchFilter,'%'))
or @searchFilter =''
答案 1 :(得分:1)
我个人将使用布尔逻辑:
WHERE funeral_home_name LIKE '%' + @searchFilter + '%'
OR searchFilter = ''
这使您的查询可保存,但是,这里包含的是全部捕获查询。因此,您需要将OPTION (RECOMPILE)
添加到查询中,或者使用动态SQL并为WHERE
的值创建适当的@searchFilter
子句。
答案 2 :(得分:1)
尝试一下。它使用逻辑条件而不是CASE语句。
注意:假定guid列为funeral_home_guid
WHERE (@searchFilter='' or (funeral_home_name Like '%'+searchFilter+'%'
or funeral_home_zip5 Like '%'+searchFilter+'%'
or funeral_home_guid like '%'+searchFilter+'%'))