Woo*_*III 5 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'
Run Code Online (Sandbox Code Playgroud)
我明白了
COLUMN_NAME IS_NULLABLE
----------- -----------
countt YES
Run Code Online (Sandbox Code Playgroud)
不过,我本以为会IS_NULLABLE返回一个数字NO,因为我认为它COUNT(*)总是返回一个数字。
是否存在COUNT(*)可以回国的情况NULL?把它包起来有危险吗ISNULL(COUNT(*), 0)?奇怪的是,这是必要的。确实,有没有任何场景可以让COUNT(任何事物)回归NULL?
我认为您的特定情况不会在该计算列中看到 NULL,并且我认为将列包装在 ISNULL() 中不会有问题。SQL Server 通常将计算列报告为 NULLABLE。
来自https://technet.microsoft.com/en-US/library/ms191250.aspx:
数据库引擎根据所使用的表达式自动确定计算列的可为空性。即使仅存在不可为空的列,大多数表达式的结果也被视为可为空,因为可能的下溢或溢出也会产生空结果。使用带有AllowsNull 属性的COLUMNPROPERTY 函数可以调查表中任何计算列的可为空性。通过指定 ISNULL(check_expression,constant),可以将可为空的表达式转换为不可为空的表达式,其中常量是替换任何空结果的非空值。