表'TABLE1'中的计算列'AGE'无法保留,因为该列是非确定性的

时间:2018-04-19 11:49:05

标签: sql sql-server alter-table

如何解决此错误?

我正在尝试添加一个带有检查约束的列,即使我保留了列,我也会收到此错误。

ALTER TABLE TABLE1
ADD AGE AS DATEDIFF(YEAR,DateOFBirth,GETDATE()) PERSISTED
CONSTRAINT CHCK_TABLE1_AGE
CHECK (AGE>0 AND AGE<105)  

错误:

  

表'TABLE1'中的计算列'AGE'无法保留,因为   该列是不确定的。

1 个答案:

答案 0 :(得分:0)

是的,该列不具有确定性,因此无法编制索引。

AGE列值每天都会更改(甚至是小时或秒),因此无法在其上创建索引。

我认为解决方案是使用AS不会自动计算此列,而是通过触发器或外部进程每天(夜晚)重新计算此列。

这样,您每天都有正确的年龄值,并且您还有快速搜索索引