ISNULL错误的回归?

时间:2015-05-11 19:46:34

标签: sql-server isnull

我有以下查询:

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却没有?

2 个答案:

答案 0 :(得分:0)

我知道我没有回答你的问题。但是,我在MSDN中发现了一些有趣的东西:

℃。在NULL子句中测试WHERE 请勿使用ISNULL查找NULL值。请改用IS NULL。以下示例查找权重列中包含NULL的所有产品。请注意ISNULL之间的空格。

USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO

https://msdn.microsoft.com/en-us/library/ms184325.aspx

答案 1 :(得分:0)

看起来数据库损坏是个问题。最后,我使用DBCC CHECKDB或DBCC CHECKTABLE来解决问题,问题就消失了。