熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VC.NET索引對查詢條件順序的影響

2013-11-13 10:05:15  來源: .NET編程 

  環境Sql Server +sp

  問題:
select datediff(day) 這句可以執行

  而下面這句不能執行(有時也可以執行)
sub_para為varchar()錯誤信息是從字符串轉換為 datetime 時發生語法錯誤
 select * from T_SUB
where item_local_code=
and datediff(daysub_paragetdate())=
and (sub_del_flag<>)

  而且不能執行的時候這個語句不會返回任何記錄集
 select * from t_sub
where item_local_code=
and isDate(sub_para)=

  
原因表中創建的索引影響了條件的執行順序
導致先執行了 datediff(daysub_paragetdate())

  下面的測試說明了這個問題
測試表及數據

    create table tb(
item_local_code char()
sub_del_flag int
sub_para varchar()
constraint PK_t primary key(sub_paraitem_local_code)
)
insert tb select
union all select a
go

  查詢語句

    select * from (
select * from tb
where item_local_code=
and sub_del_flag<>
and isdate(sub_para)=
) A where datediff(daysub_paragetdate())>
go

  刪除測試


drop table tb

  /*測試結果

  item_local_code sub_del_flag sub_para

  服務器: 消息 級別 狀態
從字符串轉換為 datetime 時發生語法錯誤


From:http://tw.wingwit.com/Article/program/net/201311/12521.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.