视图中非空日期如何变为可为空
-
21-12-2019 - |
题
我在名为的表中有一个日期时间字段 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 不可为空。但是,一旦我创建视图并将其转换为日期,它就变为可为空。
解决方案
这是因为计算列在可空性方面的行为方式。检查一下 在 MSDN 上:
数据库引擎根据所使用的表达式自动确定计算列的可为空性。即使仅存在不可为空的列,大多数表达式的结果也被视为可为空,因为可能的下溢或溢出也会产生空结果。使用带有AllowsNull 属性的COLUMNPROPERTY 函数可以调查表中任何计算列的可为空性。 通过指定 ISNULL(check_expression,constant),可以将可为空的表达式转换为不可为空的表达式,其中常量是替换任何空结果的非空值.
你可以用它作为你的 CreateDate
. 。您不必担心常数值,因为您永远不应该担心 NULL
:
ISNULL(CONVERT(date, CreateDate),0) as CreateDate
不隶属于 StackOverflow