≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server中NULL的正确使用与空间占用

人气:325 时间:2020-05-04

这篇文章主要为大家详细介绍了SQL Server中NULL的正确使用与空间占用,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

我们常在SQL Server的使用或维护中遇上NULL,那么什么是NULL?如下是MSDN给出的一段简短描述(见“Null Values”):

  • A value of NULL indicates that the value is unknown. A value of NULL is different from an empty or zero value. No two null values are equal. Comparisons between two null values, or between a NULL and any other value, return unknown because the value of each NULL is unknown.

通俗的讲,NULL就是一个值,而且这个值是未知的(unknown);NULL不能等价任何值,甚至都不等价它自己,即NULL不等于NULL。

为了清晰的理解上述的内容,我们创建一个测试表Test_NULL,然后对表插入2条含有NULL值的记录,并进行相关验证操作:

代码如下:


--创建一张允许NULL值的表
CREATE TABLE Test_NULL (
  num INT NOT NULL PRIMARY KEY
  ,fname NVARCHAR(50) NULL
  ,lname NVARCHAR(50) NULL
)

--对表插入4条数据:最后2条记录含有NULL值
INSERT INTO Test_NULL (num,fname,lname) VALUES(1, 'Tom','Jane')
INSERT INTO Test_NULL (num,fname,lname) VALUES(2, 'Dave','')
INSERT INTO Test_NULL (num,fname) VALUES(3, 'Aaron')
INSERT INTO Test_NULL (num,fname) VALUES(4, 'Betty')

为了验证NULL值是未知的,我们通过如下SQL查询表Test_NULL的记录,对lname字段进行=操作:

--若两个NULL是可以相等的,那么将输出4条记录。实际只输出2条记录

代码如下:


SELECT
  *
FROM Test_NULL tn 
LEFT JOIN Test_NULL g
  ON tn.num = g.num
WHERE tn.lname = g.lname
------------------------------------------
1  Tom Jane  1  Tom Jane
2  Dave    2  Dave  

--查询lname为''的记录,即验证NULL不等于''
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = ''
------------------------------------------
2  Dave  

 

正确查询/使用SQL Server中的NULL

 

由于NULL是未知的,因此在SQL Server默认情况下我们不能使用=或<>去判断或查询一条NULL的记录(见上述),正确的方式是:使用IS NULL或IS NOT NULL去查询或过滤一条含有NULL的记录。

另外有函数ISNULL(),可判断并转换NULL为其他值。

代码如下:


--通过IS NULL查询含有NULL的记录
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname IS NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL

--NULL不等于任何值,甚至NULL不等于NULL
--默认不能使用<>或=匹配NULL
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname <> NULL OR tn.lname = NULL
------------------------------------------

但需注意:SQL Server仅是在默认情况下不能使用=或<>,当设置ANSI_NULLS为OFF后,即可使用=或<>查询NULL值

换言之,SQL Server默认是开启ANSI_NULLS选项的。

代码如下:


--设置ANSI_NULLS为OFF,并使用=NULL查询记录
SET ANSI_NULLS OFF
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL

插入或更新NULL值:

代码如下:


--插入1条含有NULL的新记录
INSERT INTO Test_NULL (num,fname,lname) VALUES(5, 'Serena', NULL)

--更新某条记录的字段值为NULL
UPDATE Test_NULL SET fname = NULL
WHERE num = 2

 

NULL的空间占用

 

通常的认识是:NULL在可变长类型(如nvarchar(50),varchar(8))中是不占用空间的,在固定长度的类型(如int)中会占用存储空间。

实际上,上述的认识不够严谨。真实情况是,NULL在可变长与固定长度的类型中均会占用空间

在SQL Server非Sparse Columns中,存储NULL的值需1个bit的NULL bitmap mask。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文来自:http://www.q1010.com/179/8656-0.html

注:关于SQL Server中NULL的正确使用与空间占用的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQLServer批量更新两个关联表数据的方法
  • sqlserver中几种典型的等待
  • 获取SqlServer存储过程定义的三种方法
  • sqlserver进程死锁关闭的方法
  • 诊断SQLSERVER问题常用的日志概述及使用
  • SQLserver删除某数据库中所有表实现思路
  • SQLSERVER记录登录用户的登录时间(自写脚本)
  • SQLServer主键和唯一约束的区别
  • SQLSERVER聚集索引和主键(Primary Key)的误区认识
  • SQLSERVER对索引的利用及非SARG运算符认识
上一篇:实例理解SQL中truncate和delete的区别
下一篇:SQL Server 2016的数据库范围内的配置分析
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。