Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 为什么T-SQL同时允许NULL和“NULL”_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 为什么T-SQL同时允许NULL和“NULL”

Sql server 2008 为什么T-SQL同时允许NULL和“NULL”,sql-server-2008,tsql,Sql Server 2008,Tsql,当我运行以下查询时: select top 5 * from BI_Completes (nolock)where IPAddress <> NULL 我得到0个结果 但如果我把它当作 select top 5 * from BI_Completes (nolock)where IPAddress <> 'NULL' 然后它就如预期的那样工作了 它们之间有什么区别?不能将比较运算符与NULL一起使用,因为NULL不能与NULL进行比较,也不能与NULL本身进行比较

当我运行以下查询时:

select top 5 * from  BI_Completes (nolock)where IPAddress <> NULL
我得到0个结果

但如果我把它当作

select top 5 * from  BI_Completes (nolock)where IPAddress <> 'NULL'
然后它就如预期的那样工作了


它们之间有什么区别?

不能将比较运算符与NULL一起使用,因为NULL不能与NULL进行比较,也不能与NULL本身进行比较。 您必须改为使用IS运算符:

select top 5 * 
from  BI_Completes (nolock)
where IPAddress IS NOT NULL

第二条语句检查IPAddress不等于字符序列“NULL”的位置。

第一个代码片段就是不正确。NULL总是false,因为根据定义NULL永远不等于自身:您无法知道它是否等于自身,因此比较实际上是false。第二个代码段使用的字符串文字恰好与您的任何数据都不匹配

您应该使用的正确代码如下所示:

select top 5 * from  BI_Completes (nolock)where IPAddress IS NOT NULL
请看一篇MSDN文章,其中讨论了与NULL的比较

在您的情况下,看起来您得到的结果是未知的,这就是为什么没有返回任何内容。您可能将ANSI_NULLS设置为ON,这将导致返回UNKNOWN的值。。另外,在第二个示例中比较的“NULL”是字符串比较


Andrea或Joel关于处理NULL的正确方法的回答是正确的,使用is NOT NULL而不是检查是否相等。

“NULL”是一个字符串。NULL是未知值。这两个是非常不同的。我认为他的问题更多的是关于为什么NULL没有返回他所期望的。啊!我需要在我的脑袋里钻出来!谢谢大家!+1.正确的比较方法null@DavidHoerster这不是假的。正如你的回答所说,这是未知的。