索引对查询条件顺序的影响

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原帖地址:

http://community.csdn.net/expert/FAQ/FAQ_Manage.asp?id=0&Topicid=3390663

环境:Sql Server2000 +sp4

问题:

select datediff(day,'20040910','20040920') --这句可以执行

--而下面这句不能执行(有时也可以执行)

--sub_para为varchar(8),错误信息是:从字符串转换为 datetime 时发生语法错误。

select * from T_SUB

where item_local_code='03004'

and datediff(day,sub_para,getdate())=29

and (sub_del_flag<>1)

--而且不能执行的时候,这个语句不会返回任何记录集

select * from t_sub

where item_local_code='03004'

and isDate(sub_para)=0

-------------------------------------------------------------------------

--原因,表中创建的索引影响了条件的执行顺序

--导致先执行了 datediff(day,sub_para,getdate())

--下面的测试说明了这个问题

--测试表及数据

create table tb(

item_local_code char(5),

sub_del_flag int,

sub_para varchar(10),

constraint PK_t primary key(sub_para,item_local_code)

)

insert tb select '03004',1,'2003-1-1'

union all select '03005',1,'2003a1-1'

go

--查询语句

select * from (

select * from tb

where item_local_code='03004'

and sub_del_flag<>0

and isdate(sub_para)=1

) A where datediff(day,sub_para,getdate())>29

go

--删除测试

drop table tb

/*--测试结果

item_local_code sub_del_flag sub_para

--------------- ------------ ----------

03004 1 2003-1-1

服务器: 消息 241,级别 16,状态 1,行 3

从字符串转换为 datetime 时发生语法错误。

--*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航