您的位置:首页 > 数据库

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

2008-09-12 10:45 316 查看
希望大家帮忙解决下。。

环境是 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在内部处理时候是一样的?

希望大家讨论下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐