这样的逻辑,如何写TSQL利用索引?

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 (。。。)

但又没有简便的方法。利用索引,又不改变逻辑。我觉得这个问题是,项目中普遍存在的。

http://www.tuicool.com/articles/7F3E7jv