MSSQL
Create Table Person
{
CardNo--记录卡号
,Name--记录姓名
...
}
有个存储过程,查询Person。Proc_QueryPerson @CardNo ,@Name ,@SSN ,@AdmitNo
当参数不为空时,查询指定的行(参数之间为AND关系)。当参数为空时,忽略参数。
我们一般如下写存储过程的SQL:
select * from Preson where (CardNo=@CardNo Or @CardNo IS NULL) AND (Name=@Name OR @Name IS NULL)AND (SSN=@SSN OR @SSN IS NULL)
AND (AdmitNo=@AdmitNo OR @AdmitNo IS NULL)
但你会发现这样写无法利用CardNo,Name等列上的索引。
我想知道,怎么写才能利用索引。
当然用,IF 判断,多几个分支,也可达成目的。比如
IF @CardNo IS NOT NULL
select * from Person where CardNo=@CardNo AND (。。。)
ELSE IF @NAME IS NOT NULL
select * from Person where Name=@Name AND (。。。)
但又没有简便的方法。利用索引,又不改变逻辑。我觉得这个问题是,项目中普遍存在的。