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)
删除,没有任何帮助