Sql server 2008 非空日期在视图中是如何变为可空的

Sql server 2008 非空日期在视图中是如何变为可空的,sql-server-2008,tsql,indexed-view,schemabinding,Sql Server 2008,Tsql,Indexed View,Schemabinding,我在一个名为dbo.Traffic的表中有一个datetime字段 我正在尝试按天聚合流量数据。我计划创建一个Schemabilize视图并添加一个索引 CREATE VIEW [dbo].[vwTraffic] WITH SCHEMABINDING AS SELECT CONVERT(date, CreateDate) as CreateDate, Circuit, Fuseaction, COUNT(CreateDate) AS activity FROM dbo.

我在一个名为
dbo.Traffic的表中有一个datetime字段

我正在尝试按天聚合流量数据。我计划创建一个Schemabilize视图并添加一个索引

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不可为空。但是,只要我创建了一个视图并将其转换为日期,它就可以为空


这是因为计算列在可空性方面的行为。登记:

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

您可以将其用作
CreateDate
。您不必担心常量值,因为您不应该有
NULL

ISNULL(CONVERT(date, CreateDate),0) as CreateDate
使用(nolock)
删除
,没有任何帮助