我在名为的表中有一个日期时间字段 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 不可为空。但是,一旦我创建视图并将其转换为日期,它就变为可为空。

enter image description here

有帮助吗?

解决方案

这是因为计算列在可空性方面的行为方式。检查一下 在 MSDN 上:

数据库引擎根据所使用的表达式自动确定计算列的可为空性。即使仅存在不可为空的列,大多数表达式的结果也被视为可为空,因为可能的下溢或溢出也会产生空结果。使用带有AllowsNull 属性的COLUMNPROPERTY 函数可以调查表中任何计算列的可为空性。 通过指定 ISNULL(check_expression,constant),可以将可为空的表达式转换为不可为空的表达式,其中常量是替换任何空结果的非空值.

你可以用它作为你的 CreateDate. 。您不必担心常数值,因为您永远不应该担心 NULL:

ISNULL(CONVERT(date, CreateDate),0) as CreateDate
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top