我有以下查询:
SELECT apps.Field4,
ISNULL(apps.field4, '-1')
FROM applications apps
WHERE apps.OBJECT_ID = 1727847
AND ISNULL(apps.Field4, -1) = -1
apps.field4
是一个整数,field4
没有记录的值小于0。
上述查询的返回值为:
+------+----+
| NULL | -1 |
+------+----+
但是如果我将AND apps.field4 is NULL
添加到where子句中,则不会返回任何记录:
SELECT apps.Field4,
ISNULL(apps.field4, '-1')
FROM applications apps
WHERE apps.OBJECT_ID = 1727847
AND apps.field4 IS NULL
AND ISNULL(apps.Field4, -1) = -1
为什么ISNULL
似乎能够正确识别NULL
值,但IS NULL
却没有?
答案 0 :(得分:0)
我知道我没有回答你的问题。但是,我在MSDN中发现了一些有趣的东西:
℃。在NULL
子句中测试WHERE
请勿使用ISNULL
查找NULL
值。请改用IS NULL
。以下示例查找权重列中包含NULL
的所有产品。请注意IS
和NULL
之间的空格。
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
答案 1 :(得分:0)
看起来数据库损坏是个问题。最后,我使用DBCC CHECKDB或DBCC CHECKTABLE来解决问题,问题就消失了。