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这不是假的。正如你的回答所说,这是未知的。