问题在哪里条款
问题描述:
所以我有一个查询。如果我注释掉部分检查排除内容,它会起作用。问题在哪里条款
WHERE H.BatchId = 3 AND H.IsExcluded != 1
IsExcluded是一个接受NULL值的位字段。
我从中选择的所有值都是NULL,所以应该是对的。我究竟做错了什么?它没有按照它的方式返回任何值,但是如果我仅仅注释了'AND'并且之后,它就可以工作。
答
WHERE H.BatchId = 3 AND (H.IsExcluded != 1 OR H.IsExcluded IS NULL)
答
在SQL NULL!= NULL作为@scott说,但您可以使用SET ANSI_NULLS OFF。
Declare @a INT = NULL
Declare @b INT = NULL
SET ANSI_NULLS OFF
IF(@b = @a)
PRINT 'NULL is equal to NULL'
ELSE
PRINT 'NULL is not equal to NULL'
SET ANSI_NULLS ON
IF(@b = @a)
PRINT 'NULL is equal to NULL'
ELSE
PRINT 'NULL is not equal to NULL'
输出是:
- NULL等于NULL:ANSI_NULLS设置为OFF
- NULL不等于NULL:ANSI_NULLS设置为ON,这是SQL Server的默认行为。
哇我在做H.IsExcluded = NULL。谢谢!一旦它让我接受。 – Scott 2010-08-03 14:31:44
+1 - @Scott - NULL没有值(SQL认为它可以有任何值或没有值),所以它不会正常响应操作符。 – JNK 2010-08-03 14:32:29
很高兴知道。我还在学习。现在已经在专业(大学毕业后)工作了几个月。随着我一起去挑选东西。 – Scott 2010-08-03 14:34:42