我正在开发一个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 ...
变种,但没有任何运气。
我肯定在这里做了一些非常愚蠢的事情,但我无法弄明白。
感谢您的帮助。
答案 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;