时间:2021-05-23
我们常在SQL Server的使用或维护中遇上NULL,那么什么是NULL?如下是MSDN给出的一段简短描述(见“Null Values”):
通俗的讲,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条记录
正确查询/使用SQL Server中的NULL
由于NULL是未知的,因此在SQL Server默认情况下我们不能使用=或<>去判断或查询一条NULL的记录(见上述),正确的方式是:使用IS NULL或IS NOT NULL去查询或过滤一条含有NULL的记录。
另外有函数ISNULL(),可判断并转换NULL为其他值。
--通过IS NULL查询含有NULL的记录SELECT *FROM Test_NULL tnWHERE tn.lname IS NULL------------------------------------------3 Aaron NULL4 Betty NULL--NULL不等于任何值,甚至NULL不等于NULL--默认不能使用<>或=匹配NULLSELECT *FROM Test_NULL tnWHERE tn.lname <> NULL OR tn.lname = NULL------------------------------------------但需注意:SQL Server仅是在默认情况下不能使用=或<>,当设置ANSI_NULLS为OFF后,即可使用=或<>查询NULL值
换言之,SQL Server默认是开启ANSI_NULLS选项的。
--设置ANSI_NULLS为OFF,并使用=NULL查询记录SET ANSI_NULLS OFFSELECT *FROM Test_NULL tnWHERE tn.lname = NULL------------------------------------------3 Aaron NULL4 Betty NULL插入或更新NULL值:
--插入1条含有NULL的新记录INSERT INTO Test_NULL (num,fname,lname) VALUES(5, 'Serena', NULL)--更新某条记录的字段值为NULLUPDATE Test_NULL SET fname = NULLWHERE num = 2NULL的空间占用
通常的认识是:NULL在可变长类型(如nvarchar(50),varchar(8))中是不占用空间的,在固定长度的类型(如int)中会占用存储空间。
实际上,上述的认识不够严谨。真实情况是,NULL在可变长与固定长度的类型中均会占用空间
在SQL Server非Sparse Columns中,存储NULL的值需1个bit的NULL bitmap mask。
以上就是本文的全部内容,希望对大家的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。注意:SQL参数是不能接受C#的null值的,传入
科讯sql商业版中用到的ajax空间与分页函数,他们的js代码学习是非常不错的//ajax控件functionPageAjax(){varxhrObj=null
python在mysql中插入null空值sql=“INSERTINTOMROdata(MmeUeS1apId)VALUES(%s)”%‘NULL'%s没有引号
今天突然收到报警短信,说是/磁盘空间使用超过阀值。经查看,发现是有很多异常的SQL,执行不了,导致一直在处理,产生了临时占用了/tmp磁盘空间。由于操作系统的/
查询所有数据库占用磁盘空间大小的SQL语句:复制代码代码如下:selectTABLE_SCHEMA,concat(truncate(sum(data_lengt