通常有两种写作方式:不是空的和!= null.it也是经常遇到的,数据库中满足条件的数据!= null,但返回到空集合。实际上,这是由于对两个使用的差异缺乏理解。

默认情况下,建议使用null做条件判断,因为SQL默认为xx!0的判断将永远回到0行,而不会引发语法错误。

为什么会这样

在SQL Server文档中,为null值的比较定义了两条规则,例如在SQL Server 2000中:

规则之一就是指定的ansisql空值的比较值的结果(SQL-92)是虚假的,而零= null值也是错误的。另一个是不允许按照ansisql标准,即空空是真的。:

例如,数据表测试结构:

复制代码代码如下所示:

行号数据

-------------------

1'liu杨

2空

3 '12345



根据ANSI SQL标准,下面的两个查询不返回任何行:

查询1:从数据=空的测试中选择*

查询二:在数据为null的测试中选择*

根据非ANSI SQL标准,查询1将返回第二行,查询2返回1和3行。

这是因为在SQL中,零是一个独特的类型的数据,这相当于没有价值的和未知的number.null不同于0,空字符串和空间。

ANSI标准中的空值行需要下面的查询:

复制代码代码如下所示:

从数据为空的测试中选择*



由此可以看出,在非ANSI SQL标准中,数据= NULL相当于数据为空,而数据null等于数据不是null。

因此,我们要记住:当默认情况下使用比较条件时,使用关键字为null,而不是null。

如果你必须使用!=条件判断空,你需要添加此命令语句:设置ansi_nulls关闭,当数据库进入ANSI SQL的非标准模式,你会发现不是零和!NULL等于。

模式切换指令集ansi_nulls {在} /关在这里使用的价值采用ANSI SQL标准的严格,和值采用非标准兼容模式。此外,集ansi_defaults {在} /关闭命令也可以实现标准的切换,但这一命令控制一套SQL-92符合标准,包括空值的标准。

默认情况下,数据库管理器(DB)是下集ansi_nulls。但我们的大多数应用程序是通过ODBC或OLEDB访问数据库。作为一个开放的、兼容的数据库访问程序,它可能是一个兼容性的考虑,并setansi_nulls值设置为上。需要注意的一些问题,如应用存储过程或自定义函数都是基于数据库的图书馆。默认情况下,setansi_nulls是关闭的,在这样一个程序,在一个环境setansi_nulls不能修改规则,修改数据库配置参数。

例如,您的应用程序使用ADODB访问数据库,并使用OLEDB或ODBC数据提供者。查询1:选择*从测试数据为零

我们可以直接将命令发送到查询的结果集,也可以将其放入存储过程中,但是两个查询的结果不同,如果直接使用查询命令,则不返回任何行;如果访问存储过程,则返回第二行的数据。

最后,我们重申在进行SQL条件查询比较时,使用关键字的空默认值是null,而不是null。