百度首页 | 百度空间
 
查看文章
 
[SQL Server学习]深入理解ANSI_NULLS
2008年05月06日 星期二 16:50

建议大家先运行下列语句做个实验:

--初始化表

CREATE TABLE testnull(ggg INT NULL)

--填充数据

INSERT testnull(ggg)

SELECT NULL UNION ALL

SELECT 1 UNION ALL

SELECT 0

--查询一:表中有多少列?

SELECT Count(*)

FROM testnull

GO

--查询二:表中有多少列?

SET ANSI_NULLS OFF

GO

SELECT Count(*)

FROM testnull

WHERE ggg=1

OR ggg!=1;

SELECT Count(*)

FROM testnull

WHERE ggg=1

OR ggg!=1

OR ggg=NULL;

GO

--查询三:表中有多少列?

SET ANSI_NULLS ON

GO

SELECT Count(*)

FROM testnull

WHERE ggg=1

OR ggg!=1;

SELECT Count(*)

FROM testnull

WHERE ggg=1

OR ggg!=1

OR ggg=NULL

GO

--删除表

DROP TABLE testnull

NULL 值表示列的数据值未知或不可用。NULL 值与零(数值或二进制值)、零长度的字符串或空白(字符值)的含义不同。相反,空值可用于区分输入的是零(数值列)或空白(字符列)还是无数据输入(NULL 可用于数字列和字符列)。

比较空值时必须小心。比较行为取决于 SET ANSI_NULLS 选项的设置。

当 SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。这是因为未知值不能与其他任何值进行逻辑比较。这种情况发生在一个表达式与 NULL 单词进行比较,或者两个表达式相比,而其中一个表达式取值为 NULL 时。例如,当 ANSI_NULLS 为 ON 时,以下比较总是生成 UNKNOWN:ytd_sales > NULL

Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE。通过设置 ANSI_NULLS OFF 可将此选项激活。当 ANSI_NULLS 为 OFF 时,如果 ColumnA 包含空值,则比较操作 ColumnA = NULL 返回 TRUE;如果 ColumnA 除包含 NULL 外还包含某些值,则比较操作返回 FALSE。此外,两个都取空值的表达式的比较也输出 TRUE。当 ANSI_NULLS 设置为 OFF 时,以下 SELECT 语句返回 Customer 表中 Region 为空值的所有行:

SELECT CustomerID, AccountNumber, TerritoryID

FROM AdventureWorks.Sales.Customer

WHERE TerritoryID = NULL


类别:Database | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu