从一个错误提示引出SQL中in和or的问题。

希望大家帮忙解决下。。

环境是 SQL Server 2000

例子表


create table [table1]

(

      a int identity,

      b int

)

再一次调试SQL语句事有如下查询操作

select [a],[b] from [table1] where [aa] in (1,2,3)

显然, 字段aa是不存在的,所以会报错

服务器: 消息 207,级别 16,状态 3,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。


然后我觉得很奇怪,就又添加了两个数字

select [a],[b] from [table1] where [aa] in (1,2,3,4,5)

报错信息如下

服务器: 消息 207,级别 16,状态 3,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。

后来又用同样的数据测试了or的错误信息

 select [a],[b] from [table1] where [aa]=1 or [aa]=1 or [aa]=2 or [aa]=3 or [aa]=4 or [aa]=5)

第一次报错

服务器: 消息 207,级别 16,状态 3,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。


第二次报错

服务器: 消息 207,级别 16,状态 3,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'aa' 无效。
服务器: 消息 207,级别 16,状态 1,行 1

列名 'aa' 无效。

 

很不解,为什么in和or所报错误一点不差呢?

而且in为什么不在第一次报错后终止执行?

难道in和or在内部处理时候是一样的?

希望大家讨论下

posted on 2008-09-12 10:45  最坏是单飞 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/leilei/archive/2008/09/12/1289734.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值