为什么SQL Server 2005认为COUNT(...)可以为空?

时间:2017-09-11 18:31:59

标签: 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'

我得到了

COLUMN_NAME IS_NULLABLE
----------- -----------
     countt         YES

我原本希望IS_NULLABLENO,因为我认为COUNT(*)总是会返回一个数字。

是否存在COUNT(*)可以返回NULL的情况?是否有任何危险将其包裹起来ISNULL(COUNT(*), 0)?这似乎很奇怪,这是必要的。实际上,是否存在COUNT( 任何 )可以返回NULL的情况?

1 个答案:

答案 0 :(得分:2)

我不认为你的特定情况会在该计算列中看到NULL,我认为在ISNULL()中包装列时不会出现问题。 SQL Server通常将计算列报告为NULLABLE。

来自https://technet.microsoft.com/en-US/library/ms191250.aspx

  

数据库引擎自动确定可空性   根据使用的表达式计算列。结果最多   即使只有不可为空的列,表达式也被认为是可空的   存在,因为可能会产生下溢或溢出   null结果也是如此。使用COLUMNPROPERTY功能   AllowNull属性用于研究任何计算的可为空性   表中的列。可以为空的表达式可以转换为   通过指定ISNULL(check_expression,常量),不可空的,   其中常量是替换任何空结果的非空值。