问题在哪里条款

问题描述:

所以我有一个查询。如果我注释掉部分检查排除内容,它会起作用。问题在哪里条款

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) 
+1

哇我在做H.IsExcluded = NULL。谢谢!一旦它让我接受。 – Scott 2010-08-03 14:31:44

+2

+1 - @Scott - NULL没有值(SQL认为它可以有任何值或没有值),所以它不会正常响应操作符。 – JNK 2010-08-03 14:32:29

+0

很高兴知道。我还在学习。现在已经在专业(大学毕业后)工作了几个月。随着我一起去挑选东西。 – Scott 2010-08-03 14:34:42

在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的默认行为。