【发布时间】:2015-05-11 19:46:34
【问题描述】:
我有以下疑问:
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 |
+------+----+
但如果我在 where 子句中添加AND apps.field4 is NULL,则不会返回任何记录:
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 却不能?
【问题讨论】:
-
为什么在 WHERE 子句中有“and ISNULL(apps.Field4, -1) = -1”? -1 是合法的列值,所以您不想只说“WHERE (apps.Field4 IS NULL or apps.Field4 = -1)”?
-
检查是否有损坏。
-
两者似乎都适用于fiddle。您确定传入此 SQL 没有问题吗?还是直接通过 SSMS 执行?
-
@Ghost -
DBCC CHECK...命令 - 修复取决于问题。如果它在非聚集索引中,则删除和重新创建将起作用。 -
@pmbAustin 但我的代码显示“apps.Field4 IS NULL”不会导致返回任何记录。第一个查询证明 object_id = 1727847 的记录实际上在 Field4 列中有一个 NULL 值:)
标签: sql-server isnull