我想要这样,以便当其中一列中的日期与系统日期之间的差额相差超过6个月时,表中的其他值之一也会改变。
ALTER TABLE MEDICAL_CERTIFICATE
ADD CONSTRAINT MC_CLASS1
CHECK(DATEDIFF(mm, LAST_RENEWAL_DATE, SYSDATE) < 6 AND CLASS = '1' OR CLASS = '2');
程序返回一个无效的标识符错误。
我需要它,所以如果最后一次续约日期与当前日期相差超过6个月,则课程将从1更改为2。
答案 0 :(得分:1)
SQL Server无法识别SYSDATE
,除非它是表中的一列。您可以尝试以下方法:
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1
CHECK (DATEDIFF(month, LAST_RENEWAL_DATE, GETDATE()) < 6 AND
CLASS IN (1, 2)
);
请注意,我更改了CLASS
的逻辑。这可能就是您想要的。我猜CLASS
是一个数字,所以我删除了单引号(如果是字符串,则将它们重新输入)。
您可能不了解DATEDIFF()
的工作方式。它计算两个日期之间的月边界数。因此,如果今天是7月中的任何一天,则仅在2月之前的天是正确的。
如果您想要六个月的实际时间,请使用日期比较:
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1
CHECK (LAST_RENEWAL_DATE < DATEADD(month, -6, GETDATE()) AND
CLASS IN (1, 2)
);