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

4

我有一个SQLite表格,其中有一个名为“NOTES”的STRING类型列。我想创建一个触发器,自动更新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"。

Atilla的回答是正确的。我的问题是我有NULL字符串,你不能在其上添加其他字符串。 - zachd1_618
1个回答

1
使用新的.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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接