在SQL where子句的like语句中忽略列

时间:2014-08-20 13:59:33

标签: c# sql sql-server

我正在尝试使用C#Web服务创建一个jQuery自动完成搜索框,查询SQL Server联系人表中的结果。

该表包含ContactID, ContactType, FirstName, LastNameOrganization的列,我目前正在尝试允许用户在FirstNameLastnameContactType进行搜索}设置为IND(对于个人)或Organization,如果不是。

我遇到的问题是,对于将ContactType设置为ORG(对于组织)的特定联系人,我仍然只能通过键入联系人的第一个和姓。它将结果的名称显示为组织名称,但如果我按实际组织名称搜索,则不会返回任何结果。我的查询如下:

SELECT CASE WHEN contacttype= 'IND' AND FirstName != '' AND LastName != ''
                 OR ContactType IS NULL THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1
        END AS FullName, 
       ContactID
  FROM Contact 
 WHERE Updated = '1' 
   AND Organization LIKE @SearchText 
    OR FirstName + ' ' + LastName LIKE @SearchText + '%' 
 ORDER BY FullName ASC

2 个答案:

答案 0 :(得分:3)

您的ANDOR存在问题,我想您可能需要以下内容:

SELECT CASE WHEN (contacttype= 'IND' AND FirstName != '' AND LastName != '') 
                 OR ContactType is null 
                 THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1 
        END AS FullName, 
       ContactID 
  FROM Contact 
 WHERE Updated = '1' 
   AND (Organization LIKE @SearchText 
       OR FirstName + ' ' + LastName LIKE @SearchText + '%') 
 ORDER BY FullName ASC

另外,正如评论中的bolu所述,您不会为组织名称搜索附加通配符。这可能是必需的,具体取决于您传递的内容。

答案 1 :(得分:1)

按名称搜索时,您将%添加到@searchText,但按组织搜索时未添加任何内容。您可能需要根据您的逻辑使用括号(注意:我根据我的猜测在下面添加了一个括号)。

SELECT CASE WHEN contacttype= 'IND' AND FirstName != '' AND LastName != ''
                 OR ContactType IS NULL THEN FirstName + ' ' + LastName + ' ' + Email1 
            ELSE Organization + ' ' + Email1
        END AS FullName, 
       ContactID
 FROM Contact 
 WHERE Updated = '1' 
   AND (Organization LIKE @SearchText + '%' 
        OR FirstName + ' ' + LastName LIKE @SearchText + '%') 
 ORDER BY FullName ASC