Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ISNULL错误返回?_Sql Server_Isnull - Fatal编程技术网

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)