SQL视图从非空表推断可空列?

| 我有一个包含非空\“ quantity \”(十进制)和\“ status \”(int)列的Product表,并使用以下case表达式在该表上创建了一个视图:
SELECT P.ProductTypeId,
       (CASE WHEN P.StatusId IN (5, 8) THEN 0 ELSE -P.Quantity END) AS Quantity,
       ...
FROM Product P
将ProductTypeId正确推断为非null。但是,即使基础列不是可为空,此视图的“数量”列也被推断为可为空。这对我来说没有任何意义。 在这种情况下,我可以使用ISNULL / COALESCE提供一个默认值并强制不可为空,但是没有有意义的默认值,而且从我的理解来看,这不应首先发生。有什么想法吗?     
已邀请:
以下说明适用于表中的计算列。我想这同样适用于视图中的计算列。   数据库引擎自动   确定计算的可为空性   列基于使用的表达式。   大多数表达式的结果是   即使仅被视为可为空   存在不可为空的列,   因为可能出现下溢或   溢出将产生空结果,因为   好。使用COLUMNPROPERTY函数   使用AllowsNull属性   调查任何   表中的计算列。一个   可为空的表达式可以是   变成了一个不可为空的   指定ISNULL(check_expression,   常数),其中常数是   用非空值代替任何空值   结果。 您的表达式可以返回
NULL
的示例是
SET ARITHABORT OFF;
SET ANSI_WARNINGS OFF;

WITH Product(Quantity,StatusId) As
(
SELECT -2147483648,1
)
SELECT (CASE WHEN P.StatusId IN (5, 8) THEN 0 ELSE -P.Quantity END) AS Quantity  
FROM Product P
    

要回复问题请先登录注册