数据库空值处理

来源:互联网 发布:哪些端口不是敏感端口 编辑:程序博客网 时间:2024/04/26 15:02

      今天写数据库存储过程,本来好好的,没想到后来碰到表里字段为空的就进行不下去了,一个简单的条件判断,跟空值有关。纠结一阵后去网上一查,立时便明白了,哎又被null给绊倒了一次,真是不长记性啊!

       网上相关的资料有很多,这里我也不多说,只是记录一下自己的错误和解决方法!

        当时条件判断,为一个变量是否为空,如果是空该怎么办,平时写惯了,果断的写了 if  @ss  = NULL ; 结果无论我怎么处理都不会满足这个条件,百度后才知道原因是:在 SQL 语句中, NULL 值与字符列中的空格, 数字中的零, 字符列中的 NULL ASCII 字符都不相同. 当DBMS在一列中发现一个 NULL 值时, 就将其翻译为未定义或是不可用的. DBMS不能在一列中做出有关 NULL 的假设, 也不能假设 NULL 值等于 NULL, 造成某一列成为 NULL 的因素可能是: (1),值不存在;(2), 值未知; (3), 列对表不可用. 所以, 应将 NULL 值当作是一个批示符, 而不是一个值. 当DBMS 在表的某一行的某一列中找到 NULL 值时, DBMS就知道该数据已丢失或者是不可用.

   一句话, NULL 指示这个值 "未知",原因是它可能不存在, 可能不可用, 也可能就是因为值未知.

          因此,在T-SQL命令中,判断一个值是不是空值,要用“is null”而不是“= null”;处理空值有个ISNULL函数,它使用指定的值替换null。

          null 这个值很有意思啊! 如果用查询语句查看的时候有某一字段为null (注意不是NULL)就相当于此字段已有值了 就是null值,无论是用if exists (select ........) 和 select ....... from table where xx is not null 都能够将这个为null值的字段给查出来。在表里是区分大小写的,这是一定的,所以null 和NULL就不一样了。所以当一个字段设置可以为空时,表里自动填充NULL。

         还有空字符的情况。空字符串(零长度字符串),只出现在字符串类型(如nvarchar)的字段中,SQL server中表示为’’,显示为空白,手工在SQL server企业管理器中输入时清空一个单元格即可。它在.NET中对应System.String.Empty,也就是我们常用的""。在T-SQL命令中处理空字符串和处理一般的字符串没什么区别。用ADO.NET从数据库得到的空字符串也和一般的字符串没什么区别。

 

原创粉丝点击