2017-04-09 10 views
1

私が扱うSqLite 3テーブルのいくつかのフィールドには、挿入されるすべての新しい行に対して動的に計算されるデフォルト値があります。これは、例外なくすべての挿入で行われることを意味します。しかし実際には、フィールドの値を明示的に他のフィールドの値と一緒に指定すれば十分であり、これらは計算されるべきものではなくDBに記録されます。SqLiteテーブルに新しい行を挿入するときに特定のフィールドを指定しないようにする方法はありますか?

省略されていない特定のフィールド値を持つ挿入を中止するか、これらの値を破棄してデフォルトの定義を代わりに使用させるトリガの正しい形式は何ですか?

答えて

0

明示的に指定された値からデフォルト値を区別する方法はなく、デフォルト値と同じ値を持つことがあります。

さらに、INSERT文が挿入する内容を変更することはできません(追加の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; 

あなたができる最善のは、これらすべての挿入された値はデフォルト値と同じであることを確認したトリガであります

関連する問題