当我这样做时
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_NULLABLE
为NO
,因为我认为COUNT(*)
总是会返回一个数字。
是否存在COUNT(*)
可以返回NULL
的情况?是否有任何危险将其包裹起来ISNULL(COUNT(*), 0)
?这似乎很奇怪,这是必要的。实际上,是否存在COUNT(
任何 )
可以返回NULL
的情况?
答案 0 :(得分:2)
我不认为你的特定情况会在该计算列中看到NULL,我认为在ISNULL()中包装列时不会出现问题。 SQL Server通常将计算列报告为NULLABLE。
来自https://technet.microsoft.com/en-US/library/ms191250.aspx:
数据库引擎自动确定可空性 根据使用的表达式计算列。结果最多 即使只有不可为空的列,表达式也被认为是可空的 存在,因为可能会产生下溢或溢出 null结果也是如此。使用COLUMNPROPERTY功能 AllowNull属性用于研究任何计算的可为空性 表中的列。可以为空的表达式可以转换为 通过指定ISNULL(check_expression,常量),不可空的, 其中常量是替换任何空结果的非空值。