1
我要處理的SqLite 3表中的某些字段具有針對插入的每個新行動態計算的默認值,這就是每個插入沒有例外的情況下要執行的操作。但它實際上已經足夠明確地指定與其他字段值一起的字段值,並將這些值記錄到數據庫中,而不是記錄什麼是要計算的。如何在將新行插入SqLite表時禁止指定特定的字段?
觸發器的正確形式是什麼,或者中止帶有某些字段值的插入,值不會被省略,或者只是放棄這些值,讓定義的默認值被使用呢?
我要處理的SqLite 3表中的某些字段具有針對插入的每個新行動態計算的默認值,這就是每個插入沒有例外的情況下要執行的操作。但它實際上已經足夠明確地指定與其他字段值一起的字段值,並將這些值記錄到數據庫中,而不是記錄什麼是要計算的。如何在將新行插入SqLite表時禁止指定特定的字段?
觸發器的正確形式是什麼,或者中止帶有某些字段值的插入,值不會被省略,或者只是放棄這些值,讓定義的默認值被使用呢?
沒有辦法將明確指定的值與恰好與默認值相同的值區分開默認值。
此外,不可能更改插入語句將插入的內容(除了附加的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;