zoukankan      html  css  js  c++  java
  • 从一个错误提示引出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在内部处理时候是一样的?

    希望大家讨论下

  • 相关阅读:
    Java8简单的本地缓存实现
    Java堆内存详解
    拖拽实现备忘:拖拽drag&拖放drop事件浅析
    微信小程序下拉刷新PullDownRefresh的一些坑
    ES6里let、const、var区别总结
    nodejs大文件分片加密解密
    node+js实现大文件分片上传
    大文件上传前台分片后后台合并的问题
    fs.appendFileSync使用说明,nodejs中appendFile与writeFile追加内容到文件区别
    JS中的单线程与多线程、事件循环与消息队列、宏任务与微任务
  • 原文地址:https://www.cnblogs.com/leilei/p/1289734.html
Copyright © 2011-2022 走看看