2013-10-04 57 views
1

我正在研究一個Sqlite數據庫,其中一個表格同時具有initial_date列和due_date之一。我希望每次改變前者的值時使用觸發器自動設置後者的值,但某些內容不起作用。使用觸發器設置截止日期列

這裏的表DDL

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

    initial_date DATETIME, 
    due_date  DATETIME 
); 

的簡化versione正如你可以看到,這兩個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 ...變種,但沒有任何運氣。

我確實在這裏做了一些非常愚蠢的事情,但我無法弄清楚什麼。

謝謝你的幫助。

回答

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; 
+0

這是正確的,我完全錯過它。一旦修正了這個語法,它就沒有任何問題。此外,'initial_date IS NOT NULL'檢查在'WHEN'和'WHERE'子句中都有效。 –