ISNULL 错误 return?
ISNULL erroneous return?
我有以下查询:
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的记录
上述查询的 return 值为:
+------+----+
| NULL | -1 |
+------+----+
但是如果我将 AND apps.field4 is NULL
添加到 where 子句,则不会 returned:
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
却不能?
我知道我不是在回答你的问题。但是,我在 MSDN 中发现了一些有趣的东西:
C。在 WHERE
子句中测试 NULL
不要使用 ISNULL
来查找 NULL
值。请改用 IS NULL
。以下示例查找重量列中具有 NULL
的所有产品。注意 IS
和 NULL
之间的 space。
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
问题似乎是数据库损坏。最后我要么使用 DBCC CHECKDB 要么 DBCC CHECKTABLE 来解决问题,问题就消失了。
我有以下查询:
SELECT apps.Field4,
ISNULL(apps.field4, '-1')
FROM applications apps
WHERE apps.OBJECT_ID = 1727847
AND ISNULL(apps.Field4, -1) = -1
apps.field4
是一个整数,field4
.
上述查询的 return 值为:
+------+----+
| NULL | -1 |
+------+----+
但是如果我将 AND apps.field4 is NULL
添加到 where 子句,则不会 returned:
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
却不能?
我知道我不是在回答你的问题。但是,我在 MSDN 中发现了一些有趣的东西:
C。在 WHERE
子句中测试 NULL
不要使用 ISNULL
来查找 NULL
值。请改用 IS NULL
。以下示例查找重量列中具有 NULL
的所有产品。注意 IS
和 NULL
之间的 space。
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
问题似乎是数据库损坏。最后我要么使用 DBCC CHECKDB 要么 DBCC CHECKTABLE 来解决问题,问题就消失了。