select * from dlyother where (@ptypeid = '%' or ptypeid like @ptypeid)
exec a '00001'
写成这样查询的时候使用的是Ptypeid索引上得扫描,不是查找,Ptypeid上得选择性高,而且数量大,扫描的逻辑读很高
写成 select * from dlyother where ptypeid like @ptypeid
是索引查找,但是由于有'',执行计划估计行和实际行会有较大偏差,(为''的行在估计行中被排除了),执行计划可能出错 ------解决方案-------------------- 楼主调试一下,看它在执行什么操作,执行计划不是真的运行,所以可能有很小的误差,也有可能有些语法不作检查呀。 ------解决方案--------------------
Create Procedure a
(
@ptypeid nvarchar(50)
)
as
if @ptypeid = '%'
select * from dlyother
else
select * from dlyother where ptypeid like @ptypeid