2015-11-11 53 views
0

我有一個SQLite3數據庫,我想要創建。我想要一個INTEGER字段(名爲「Length」)的DEFAULT值等於另一個字段(名爲「Pattern」)中字符串的長度。動態設置默認SQLite3字段

CREATE TABLE knowledge (
    Entry INTEGER PRIMARY KEY AUTOINCREMENT, 
    Priority TINYINT UNSIGNED CHECK (0 <= Priority < 15), 
    Pattern TEXT NOT NULL, 
    Length INTEGER UNSIGNED DEFAULT 'LENGTH(Pattern);' 
); 

但是,當前的表格設置不會根據需要「動態」設置「長度」的值。

如何正確設置「長度」的DEFAULT值爲「模式」字段的字符串長度?

回答

1

要指定默認值是動態的,它SQLite不支持的。一種解決方案是CL。說過。我將默認值定義爲0,並使用不是一個而是兩個觸發器(一個用於插入,另一個用於更新)。

CREATE TRIGGER default_length_on_insert AFTER INSERT ON knowledge WHEN NEW.Length IS 0 
BEGIN 
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID; 
END; 

CREATE TRIGGER default_length_on_update AFTER UPDATE ON knowledge 
BEGIN 
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID; 
END; 
+0

謝謝!我喜歡有兩個觸發器的想法。 –

1

默認值必須是常數。

您coud使用trigger代替:

CREATE TRIGGER knowledge_length_default 
AFTER INSERT ON knowledge 
FOR EACH ROW 
WHEN NEW.Length IS NULL 
BEGIN 
    UPDATE knowledge 
    SET Length = length(NEW.Pattern) 
    WHERE Entry = NEW.Entry; 
END; 
+0

感謝您的幫助。 –