2 wcl1986 1 wcl1986_1 于 2017.01.11 18:06 提问

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

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

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

1个回答

dabocaiqq
dabocaiqq   2017.01.14 22:45
Csdn user default icon
上传中...
上传图片
插入图片