2017-04-09 70 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; 
相关问题