码迷,mamicode.com
首页 > 数据库 > 详细

TSQL--SET ANSI_NULLS OFF

时间:2015-01-28 14:20:04      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

当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归为一组

TSQL--SET ANSI_NULLS OFF

标签:

原文地址:http://www.cnblogs.com/you-jia/p/4255616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!