1

我正在开发一个 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=1due_date保持初始NULL值。

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

我肯定在这里做了一些非常愚蠢的事情,但我不知道是什么。

感谢您的帮助。

4

1 回答 1

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;
于 2013-10-04T08:25:48.590 回答