我希望它是这样的:当其中一列中的日期与系统日期之间的差异超过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。
发布于 2019-04-13 22:15:29
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月份之前的几天是正确的。
如果您想要6个实际月份,则使用日期比较:
ALTER TABLE MEDICAL_CERTIFICATE ADD CONSTRAINT MC_CLASS1
CHECK (LAST_RENEWAL_DATE < DATEADD(month, -6, GETDATE()) AND
CLASS IN (1, 2)
);https://stackoverflow.com/questions/55666431
复制相似问题