WHERE子句中的问题

时间:2010-08-03 14:29:31

标签: sql sql-server tsql

所以我有一个查询。如果我注释掉检查排除的部分,它就可以工作。

WHERE H.BatchId = 3  AND H.IsExcluded != 1

IsExcluded是一个接受NULL值的位字段。

我选择的所有值都是NULL,因此应该是正确的。我究竟做错了什么?它没有按原样返回任何值,但是如果我只注释掉'AND',那么它就可以了。

2 个答案:

答案 0 :(得分:9)

WHERE H.BatchId = 3  AND (H.IsExcluded != 1 OR H.IsExcluded IS NULL)

答案 1 :(得分:0)

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