2014-12-22 47 views
4

我有一個SQLite表,其中STRING類型列名爲「NOTES」。我想創建一個自動更新NOTES列內容的觸發器,但不會完全替代它。如何讓SQLite觸發器修改現有的字符串

以下不起作用,我看不到錯誤,NOTES列永遠不會更新。

CREATE TRIGGER AlterNote 
    AFTER INSERT ON MyTable 
    FOR EACH ROW 
    BEGIN UPDATE MyTable 
     SET NOTES= NOTES || 'DATEMODIFIED: ' || date('now') 
     WHERE rowid=NEW.rowid; 
    END; 

這樣確實可能是因爲我不再引用我更新的東西:

CREATE TRIGGER AlterNote 
    AFTER INSERT ON MyTable 
    FOR EACH ROW 
    BEGIN UPDATE MyTable 
     SET NOTES= 'DATEMODIFIED: ' || date('now') 
     WHERE rowid=NEW.rowid; 
    END; 

有沒有辦法做到這一點?基本上NOTES = NOTES +「blah」

+0

Atilla的回答是正確的。我的問題是我有NULL字符串,你不能添加其他字符串。 –

回答

1

使用new.COLUMN_NAME語法。

CREATE TRIGGER AlterNote 
    AFTER INSERT ON MyTable 
    FOR EACH ROW 
    BEGIN UPDATE MyTable 
     SET NOTES= new.Notes || ',DATEMODIFIED: ' || date('now') 
     WHERE rowid=NEW.rowid; 
    END; 

查看示例運行。

sqlite> 
sqlite> create table mytable(Notes text); 
sqlite> insert into mytable(Notes) Values('aa'); 
sqlite> select * from mytable; 
aa 
sqlite> CREATE TRIGGER AlterNote 
    ...>  AFTER INSERT ON MyTable 
    ...>  FOR EACH ROW 
    ...>  BEGIN UPDATE MyTable 
    ...>   SET NOTES= new.Notes || ',DATEMODIFIED: ' || date('now') 
    ...>   WHERE rowid=NEW.rowid; 
    ...>  END; 
sqlite> 
sqlite> 
sqlite> 
sqlite> 
sqlite> insert into mytable(Notes) Values('aa2'); 
sqlite> select * from mytable; 
aa 
aa2,DATEMODIFIED: 2014-12-22