查看文章 |
建议大家先运行下列语句做个实验: --初始化表 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 语句返回 SELECT CustomerID, AccountNumber, TerritoryID FROM AdventureWorks.Sales.Customer WHERE TerritoryID = NULL
|