TSQL--SET ANSI_NULLS OFF

当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或<>运算都得到FALSE

 

当ANSI_NULLS为OFF时,将不再遵循SQL92标准,可以使用=和<>来与NULL做BOOL运算

 

测试代码

SET ANSI_NULLS ON

;WITH T1 AS

(

SELECT 1 AS ID

UNION ALL

SELECT NULL

UNION ALL 

SELECT 2 

)

SELECT * FROM T1

WHERE ID =NULL

 

GO

SET ANSI_NULLS OFF

;WITH T1 AS

(

SELECT 1 AS ID

UNION ALL

SELECT NULL

UNION ALL 

SELECT 2 

)

SELECT * FROM T1

WHERE ID =NULL

 

测试结果:

第二次查询能获取NULL的一行

 

 

关于NULL的延伸:

1. 对应聚合函数COUNT,只有SELECT COUNT(*)和SELECT COUNT(1) 会将为NULL的行计算在内,SELECT COUNT(ID)会忽略ID列为NULL的行

2. 对应除COUNT外的其他聚合函数,计算时不考虑为NULL的行

3. 对应CHECK CONSTRAINT,如果列允许为NULL的条件下,为NULL的行将不受CHEKC CONSTRAINT的限制,例如有CHECK CONSTRAINT条件为C1>10,对C1列插入NULL值或更新为NULL不会违反CHECK CONSTRAINT.

4. 在GROUP BY 的时候,会将所有NULL归为一组

posted @ 2015-01-28 13:47  Forward1990  阅读(149)  评论(0编辑  收藏  举报