三值逻辑下一共即有三种可能的结果产生:True/False/Null。在T-SQL中对Null值处理有两种运算符。

        算术运算符

      在算术运算符中所有与Null值的运算返回均为Null。

        比较运算符

      在比较运算符中通常使用WHERE COLUMN_NAME IS NULL 来筛选该列为空的数据行。而直接使用WHERE COLUMN_NAME = NULL 将会返回NULL,这时设置SET ANSI_NULLS OFF 即可达到 IS NULL 等价于 =NULL 的结果。

      返回结果的运算条件必须为True,即Where 后筛选条件三值逻辑必须为True,其余虽均不会产生语法错误,但由于条件中含未知数而不返回结果。

      在聚合函数内除COUNT(*)会统计所有行,其余均会忽略NULL值。

      因此在日常运用中无论时数据库端还是开发程序端经常会因为少判断了NULL值的情况而导致程序、Job等报错。这时即会使用ISNULL()函数去判断该值,假设是NULL值再将NULL替换成指定的值。而程序端开发人员则使用ISDBNULL等方法先去判断。一旦遗漏判断即可能导致报错。为此首先要促使开发人员必须考虑全面,建立全面的容错机制等。从另一方面看,在定义表时应该尽量在字段上添加NOT NULL 约束,如果经常会插入空值进去,则可以在该列上建立默认值约束。可以设置为''或者N/A等唯一的标识(常规情况下人为不会写入)。另待后期研究IsNull等函数的性能问题。

Ps: NullIf()函数可以比较两值,如相等则可返回该值为NULL。

    COALESCE()函数类似于ISNULL()。COALESCE(expression1..n)结果返回第一个非NULL值,如果全是NULL则返回NULL。

* NullIf() IsNull() Coalesce()三者之间可搭配灵活使用达到预期对空值处理的目的。