Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 为什么SQLServer2005认为COUNT(…)可以为空?_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 为什么SQLServer2005认为COUNT(…)可以为空?

Sql server 为什么SQLServer2005认为COUNT(…)可以为空?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,当我这样做的时候 CREATE VIEW Test1 AS WITH OneRow AS (SELECT a = 1) SELECT countt = COUNT(*) FROM OneRow GO SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Test1' 我明白了 不过,我原以为可以为空应该是否,因为我认为COUNT(*)总是返回一个数字 是否存在COUNT(*)可

当我这样做的时候

CREATE VIEW Test1 AS
WITH OneRow AS (SELECT a = 1)
SELECT countt = COUNT(*)
FROM OneRow

GO

SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Test1'
我明白了

不过,我原以为
可以为空
应该是
,因为我认为
COUNT(*)
总是返回一个数字


是否存在
COUNT(*)
可能返回
NULL
的情况?将其包装为
ISNULL(COUNT(*),0)是否有任何危险?这似乎很奇怪,这是必要的。事实上,是否存在
COUNT(
anything
可能返回
NULL

我认为您的特定情况下,在该计算列中不会看到NULL,并且我认为在ISNULL()中包装该列不会有问题。SQL Server通常将计算列报告为可空

发件人:

数据库引擎会自动确定 基于使用的表达式计算列。大多数的结果 即使只有不可为空的列,表达式也被视为可为空 存在,因为可能会产生下溢或溢流 空结果也是如此。将COLUMNPROPERTY函数与 AllowsNull属性以调查任何计算 表中的列。可以将可为null的表达式转换为 通过指定ISNULL(检查_表达式,常量)不可为空, 其中,常数是一个非空值,用于替换任何空结果


如果引用内容,请使用
正确引用(或使用blockquote按钮)。否则,您将被标记为侵犯版权。换句话说,该列在技术上是可以为null的,但它永远不会返回null。
COLUMN_NAME IS_NULLABLE
----------- -----------
     countt         YES