如何使SQLite触发器修改现有字符串

时间:2014-12-22 21:20:51

标签: sqlite triggers

我有一个SQLite表,其中STRING类型的列名为“NOTES”。我想创建一个自动更新NOTES列内容的触发器,但不会完全替换它。

以下不起作用,我没有看到错误,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”

1 个答案:

答案 0 :(得分: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