2

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

在此处输入图像描述

4

1 回答 1

3

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

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

您可以将其用作您的CreateDate. 您不必担心永远不应该拥有的常量值NULL

ISNULL(CONVERT(date, CreateDate),0) as CreateDate
于 2014-01-09T03:55:31.893 回答