我正在创建一个包含date
列的表格。我想添加一个检查约束来验证日期是否在将来。
create table test_table (
schedule_date date not null,
check (schedule_date >= TODAY)
);
上面的sql给了我一个语法错误。
09:43:37 [CREATE - 0 row(s), 0.000 secs] [Error Code: -201, SQL State: 42000] A syntax error has occurred.
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 1 errors]
如何在日期列上添加约束?
答案 0 :(得分:3)
今天你不能在检查约束中使用。 正如官方文件所述:
使用搜索条件定义检查约束。搜索条件不能包含用户定义的例程,子查询,聚合,主机变量或rowid。此外,条件不能包含变量内置函数CURRENT,USER,SITENAME,DBSERVERNAME或TODAY。
我认为解决方案可以使用插入/更新触发器。
答案 1 :(得分:1)
正如Copilot所说,Informix根本不允许这样做。如果任何其他RDBMS允许它,我会感到惊讶。
当你想到它时,固有的定时炸弹应该是显而易见的。插入时的行符合约束,但随着时间的推移将使约束失败。引擎如何标记出来?
解决方案是:
答案 2 :(得分:0)
我没有要检查的informix数据库,但我认为逗号是无关的并导致语法错误。
试
create table test_table (
schedule_date date not null CHECK (schedule_date >= TODAY)
);