计算列具有可空类型,即使列涉及非空类型

时间:2012-08-10 12:33:22

标签: sql-server-2008

我想创建一个计算列。

我有一张表说表1有一个名为“加入日期”的列。

我想通过减去今天的日期和[加入日期]列来创建一个将返回Months(int)值的列。

我用过这个:( datediff(月,[DateJoining],getdate()))

它运行得很好,但我不知道为什么计算类型列为null 类型甚至我使DateJoining列非空类型

任何帮助都是高度赞赏的。

1 个答案:

答案 0 :(得分:1)

我不能告诉你为什么SQL Server会这样做,我也不明白为什么它比理解更重要(你不会真正得到它,因为我不知道这里是否有人可以解释为什么就是这种情况)。我认为对于一个int它可能会防止溢出(即使在这种情况下显然不可能)。

如果您确实希望系统目录确认该列不可为空:

ALTER TABLE dbo.whatever ADD column_name 
  AS (ISNULL(datediff(month, DateJoining, getdate()), 0));

注意:此技巧不适用于COALESCE