我正在尝试使用C#Web服务创建一个jQuery自动完成搜索框,查询SQL Server联系人表中的结果。
该表包含ContactID, ContactType, FirstName, LastName
和Organization
的列,我目前正在尝试允许用户在FirstName
时Lastname
和ContactType
进行搜索}设置为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
答案 0 :(得分:3)
您的AND
和OR
存在问题,我想您可能需要以下内容:
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