Sql server ISNULL错误返回?
我有以下疑问:Sql server ISNULL错误返回?,sql-server,isnull,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 | +------+----+
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 |
+------+----+
但是,如果我将和apps.field4添加到where子句中为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
值,而ISNULL
却不能识别?我知道我没有回答你的问题。然而,我在MSDN中发现了一些有趣的东西:
C.在WHERE
子句中测试NULL
不要使用ISNULL
查找NULL
值。改为使用为NULL
。以下示例在“重量”列中查找所有具有NULL
的产品。请注意与之间的空格为空
USE AdventureWorks2012;
GO
SELECT Name, Weight
FROM Production.Product
WHERE Weight IS NULL;
GO
看起来数据库损坏是问题所在。最后,我使用DBCC CHECKDB或DBCC CHECKTABLE解决了这个问题,问题就消失了。为什么WHERE子句中有“and ISNULL(apps.Field4,-1)=-1”?-1是一个合法的列值,所以您不想只说“WHERE(apps.Field4为NULL或apps.Field4=-1)”?检查是否损坏。这两个值似乎都适用于一个。您确定传入此SQL没有问题吗?或者这是通过SSMS直接执行的?@Ghost-DBCC CHECK…
命令-修复取决于问题。如果它位于非聚集索引中,则删除并重新创建将起作用。@pmbAustin但我的代码显示“apps.Field4为NULL”不会导致返回任何记录。第一个查询证明object_id=1727847的记录实际上在Field4列中有一个NULL值:)ISNULL正在使用,因为我希望将NULL值和-1值视为相同的值。或者换句话说,它是一个简短的形式,而不是do:AND(field4为NULL或field4=-1)