2017-04-09 66 views
1

我要處理的SqLite 3表中的某些字段具有針對插入的每個新行動態計算的默認值,這就是每個插入沒有例外的情況下要執行的操作。但它實際上已經足夠明確地指定與其他字段值一起的字段值,並將這些值記錄到數據庫中,而不是記錄什麼是要計算的。如何在將新行插入SqLite表時禁止指定特定的字段?

觸發器的正確​​形式是什麼,或者中止帶有某些字段值的插入,值不會被省略,或者只是放棄這些值,讓定義的默認值被使用呢?

回答

0

沒有辦法將明確指定的值與恰好與默認值相同的值區分開默認值。

此外,不可能更改插入語句將插入的內容(除了附加的UPDATE語句)。

你能做的最好是檢查所有這些插入值與默認值相同的觸發器:

CREATE TABLE MyTable (
    Name TEXT, 
    Date DATE DEFAULT CURRENT_DATE 
); 

CREATE TRIGGER MyTable_CheckDefaultDate 
BEFORE INSERT ON MyTable 
WHEN ifnull(NEW.Date, '') <> CURRENT_DATE 
BEGIN 
    SELECT RAISE(FAIL, "date must be default"); 
END; 
相關問題