使用触发器设置截止日期列

时间:2013-10-04 07:19:25

标签: sqlite triggers

我正在开发一个Sqlite数据库,其中一个表包含initial_date列和due_date列。我想在每次改变前者的值时使用触发器自动设置后者的值,但是某些东西不起作用。

这是DDL表的简化版本

CREATE TABLE timetable (
    id           INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

    initial_date DATETIME,
    due_date     DATETIME
);

如您所见,两个DATETIME列允许NULL值;这是因为在实际表中我想插入行而不设置initial_date并稍后更新这些行以设置initial_date

这是我添加的触发器

CREATE TRIGGER [timetable-due-date] AFTER UPDATE ON timetable
BEGIN
    UPDATE timetable
        SET due_date = DATE( NEW.initial_date, '+ 10 days' )
        WHERE id = NEW.id
            AND NEW.initial_date IS NOT NULL;
END;

但它没有发射。如果我执行UPDATE timetable SET initial_date='2013-10-04' WHERE id=1,则due_date会保留最初的NULL值。

我也尝试使用CREATE TRIGGER ... AFTER UPDATE OF initial_date ON ...变种,但没有任何运气。

我肯定在这里做了一些非常愚蠢的事情,但我无法弄明白。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

日期修饰符的语法错误; +和数字之间必须没有空格:

CREATE TRIGGER "timetable-due-date"
AFTER UPDATE OF initial_date ON timetable
WHEN NEW.initial_date IS NOT NULL
BEGIN
    UPDATE timetable
    SET due_date = DATE(new.initial_date, '+10 days')
    WHERE id = NEW.id;
END;