非空日期如何在视图中变为可空
Posted
技术标签:
【中文标题】非空日期如何在视图中变为可空【英文标题】:How did a not null date become nullable in a view 【发布时间】:2014-01-27 11:27:08 【问题描述】:我在名为 dbo.Traffic
的表中有一个日期时间字段
我正在尝试按天汇总流量数据。我正计划创建一个模式绑定视图并添加一个索引。
CREATE VIEW [dbo].[vwTraffic] WITH SCHEMABINDING AS
SELECT CONVERT(date, CreateDate) as CreateDate, Circuit, Fuseaction,
COUNT(CreateDate) AS activity
FROM dbo.Traffic WITH (NOLOCK)
GROUP BY CONVERT(date, CreateDate), Circuit, Fuseaction
在基表中,CreateDate 不可为空。但是,一旦我创建了一个视图并将其转换为日期,它就会变为可为空。
【问题讨论】:
删除with (nolock)
没有帮助
【参考方案1】:
这是因为计算列在可空性方面的行为方式。签到here on MSDN:
数据库引擎会根据使用的表达式自动确定计算列的可空性。即使只有不可为空的列存在,大多数表达式的结果也被认为是可空的,因为可能的下溢或溢出也会产生空结果。使用具有 AllowsNull 属性的 COLUMNPROPERTY 函数来调查表中任何计算列的可空性。 可以通过指定 ISNULL(check_expression, constant) 将可空表达式转换为不可空表达式,其中常量是替换任何空结果的非空值。
您可以将其用作您的CreateDate
。你不必担心常量值,因为你不应该有NULL
:
ISNULL(CONVERT(date, CreateDate),0) as CreateDate
【讨论】:
以上是关于非空日期如何在视图中变为可空的主要内容,如果未能解决你的问题,请参考以下文章
Firebase,Swift:返回类型上的可空性说明符冲突,“可空”与现有说明符“非空”冲突