FW: diff between =null and is NULL in sql
来源:互联网 发布:远程网络教育的毕业证 编辑:程序博客网 时间:2024/06/05 00:49
当我们在 sql server 中用 DECLARE 申明一个变量时, sql server 将会把变量存储在SQLs 内存空间的变量列表区域(variable table),变量列表中包含了变量的名称和存储地址。然而如果我们在创建变量的时候并没有给变量赋值的话,sql server是没有为变量分配内存的,因此变量并没有在内存中被定义。
然后当你用 SET 关键字给变量赋值的话,sql server 将为这个值分配内存空间并将地址存放在变量列表(variable table)中。如果你再次为这个变量赋值的话新的内存地址将替换旧的地址。
下面我们就来讨论一下 “= NULL”和“IS NULL”的区别。
“= NULL”
“= NULL”是值表达式。意味着,这个表达式会判断是否已经为变量正确设置了值。事实上我们是可以设置一个变量的值为 NULL 的(如果设置变量 = NULL,这就说明变量的值是未知的 unknown)。参考下面的代码。
DECLARE @val CHAR(4)
SET @val = NULL
我们显式给变量赋值 NULL,sql server会为变量分配内存空间并指出变量值是未知的 unknown,因此下面的表达式将返回 true(因为我们已经通过 SET @val = NULL 为变量分配了内存空间):
If @val = NULL
但如果我们像下面的代码段一样在申明变量的时候不给变量赋值:
DECLARE @val CHAR(4)
If @val = NULL
表达式将返回 false。
导致这种情况的原因是,在没有给变量赋值的情况下,sql server 是不会为变量分配内存空间,因此地址是未知的就无法进行值的比较了。
Note: 上面的示例结果与 ANSI_NULLS (ON|OFF) 的设置有关。
“IS NULL”
“IS NULL”的情况就有点微妙,在需要比较变量值是不是为 NULL 的时候它应该是首选的用法。IS NULL 会同时检查变量地址和变量的地址所指向的值是不是未知的(unknown)。研究一下下面的代码:
- DECLARE @val CHAR(4)
- If @val IS NULL
- PRINT 'TRUE'
- ELSE
- PRINT 'FALSE'
- SET @val = NULL
- If @val IS NULL
- PRINT 'TRUE'
- ELSE
- PRINT 'FALSE'
上面两个表达式都会返回 TRUE, 原因是 IS NULL 同时比较地址和值是不是未知的。
0 0
- FW: diff between =null and is NULL in sql
- SQL is NULL 和 = NULL区别
- day17 oracle ----查询(select) ---(BETWEEN ... AND... ,IN(list), LIKE , IS NULL , AND ,OR, NOT) ---(字符 , 数字 ,日期, 转换
- The difference between null and isEmpty in Groovy
- SQL NOT IN constraint and NULL values
- Mysql| where子句过滤数据(BETWEEN,IS NULL,=,!=,...)
- mysql <> null != null is not null
- IS NULL和=NULL的区别(SQL)
- SQL中IS NOT NULL与!=NULL的区别
- "=NULL"和"Is NULL"
- 理解NULL IN SQL
- SQL Not in null
- Different between 0 '0' and NULL
- execution time between count(id) and * under condition - not in (null)
- SQL is null 条件处理
- NULL and NUL in C
- Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1
- is null 与 =null的区别
- 只读事务的一些概念
- [Leetcode] Candy (Java)
- [JQuery]怎样获取和修改文本框的值
- c++获取系统当前时间
- 几种web报表打印方案的比较
- FW: diff between =null and is NULL in sql
- 使用ajax上传/下载文件方法
- Unity3d策略模式
- ARM软件优化,从1s到10ms
- 露眼看App--怎样做一款旅游类的App ?
- 支持Android4.0以下webp的使用
- Android高效加载大图、多图解决方案,有效避免程序OOM
- C# TCP客户端编程消息格式为JSON
- 从头写一个rtsp服务器