Sql DATEDIFF约束
我希望这样,当其中一列中的日期与系统日期之间的差值超过6个月时,表中的其他值之一会发生变化Sql DATEDIFF约束,sql,sql-server,Sql,Sql Server,我希望这样,当其中一列中的日期与系统日期之间的差值超过6个月时,表中的其他值之一会发生变化 ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1 CHECK(DATEDIFF(mm, LAST_RENEWAL_DATE, SYSDATE) < 6 AND CLASS = '1' OR CLASS = '2'); ALTER TABLE医疗证书 添加约束MC_CLASS1 检查(DATEDIFF(mm,上次更新日期,系统日期)
ALTER TABLE MEDICAL_CERTIFICATE
ADD CONSTRAINT MC_CLASS1
CHECK(DATEDIFF(mm, LAST_RENEWAL_DATE, SYSDATE) < 6 AND CLASS = '1' OR CLASS = '2');
ALTER TABLE医疗证书
添加约束MC_CLASS1
检查(DATEDIFF(mm,上次更新日期,系统日期)<6且类='1'或类='2');
程序返回时出现无效标识符错误
我需要它,因此,如果上次续订日期和当前日期的差异超过6个月,则类将从1更改为2。SQL Server无法识别
SYSDATE
,除非这是表中的一列。您可以尝试以下方法:
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1
CHECK (DATEDIFF(month, LAST_RENEWAL_DATE, GETDATE()) < 6 AND
CLASS IN (1, 2)
);
请尝试SYSDATETIME()
。您说的是“约束”,然后说的是“表中的一个其他值发生了变化”。约束不能更改行的内容。此外,在插入或修改行时会对其进行评估-您的描述意味着应该每天检查。我认为是时候退一步,考虑一下你的目标了,因为约束似乎并没有实现它。
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1
CHECK (LAST_RENEWAL_DATE < DATEADD(month, -6, GETDATE()) AND
CLASS IN (1, 2)
);