Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DATEDIFF约束_Sql_Sql Server - Fatal编程技术网

Sql DATEDIFF约束

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,上次更新日期,系统日期)

我希望这样,当其中一列中的日期与系统日期之间的差值超过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,上次更新日期,系统日期)<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)
          );