日期:2014-05-18  浏览次数:20441 次

条件部分的执行顺序
SQL code

--CREATE TABLE #T1
--(
--    col1 int not null,
--    col2 int not null
--)
--insert into #t1
--Select 1,2 union
--Select 3,1 union
--Select 0,2 union
--Select 1,0
--go
Select * From #T1

Select * from #T1 Where (col1<>0) and (col2/col1>1.5)--1
Select * from #T1 Where (col2/col1>1.5) and (col1<>0)--2
Select * from #T1 Where (col2/col1>1.5)              --3


为何1、2句不报错,3却报错(3如果报错的话2应该也报错的啊) ?

------解决方案--------------------
不是有col1<>0这个条件吗?
------解决方案--------------------
第二句的col1<>0排除了0作为除数的可能性,所以是对的,语句三没有。其实意思是同时满足where后的条件。
------解决方案--------------------
条件and是与的意思,就是都要为真。
第3条,当没有col1<>0这个条件,分母为0,所以错误。而第1,2条语句,则家里分母不为零的过滤条件,自然就不会出错。