wcl1986_1 2017-01-11 10:06 采纳率: 0%
浏览 741

这样的逻辑,如何写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 (。。。)

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

  • 写回答

1条回答

  • dabocaiqq 2017-01-14 14:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?