希望大家帮忙解决下。。
环境是 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在内部处理时候是一样的?
希望大家讨论下