在程序中按一个查询搜索

时间:2019-03-21 10:12:14

标签: sql sql-server search

在我的网站中,我有一个字段用于按名称,邮政编码,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 ...

那我该怎么做?

3 个答案:

答案 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+'%'))