基本上我有 3 个这样的表(具有多对多关系); 我正在查询这样的搜索;
ALTER PROC [dbo].[usp_ContactSearch]
(
@PersonName varchar(60)= '',
@MobileNo varchar(20)= '',
@Nationlity varchar(50)='' ,
@ContactTypes varchar(max) = ''
)
AS
BEGIN
SELECT DISTINCT c.ContactId, c.PersonName, ct.ContactType, ct.ContactTypeId
FROM Contact c
LEFT OUTER JOIN ContactWithContactType cct
ON c.ContactId = cct.ContactId
LEFT OUTER JOIN ContactType ct
ON cct.CountactTypeId = ct.ContactTypeId
WHERE
c.PersonName LIKE CASE WHEN @PersonName='' THEN c.PersonName ELSE '%'+@PersonName+'%' END
AND
c.MobileNo1 LIKE CASE WHEN @MobileNo='' THEN c.MobileNo1 ELSE '%'+@MobileNo+'%' END
AND
c.Nationality LIKE CASE WHEN @Nationlity='' THEN c.Nationality ELSE '%'+@Nationlity+'%' END
END
所以,默认的结果数据是;
所以,从前端,我有ContactTypes(这是动态的,即来自联系人类型表),界面看起来像这样
现在,每当用户检查PropertyOwner (ContactTypeId=1) 时,数据应该被过滤,并且只有那些属于ContactTypeId=1的联系人应该被显示
,当我检查第二个复选框时,即租户(ContactTypeId=2)。数据应该进行更多过滤,并且只显示属于 ContactTypeId= 1 和 2 的那些联系人。类似地,对于第 3 个 ContactType,数据应该进行更多过滤,依此类推。
所以,问题是ContactTypes是动态的,我不知道如何处理这种情况。
非常感谢有关查询和性能的任何帮助。