我有一个 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;
有办法做到这一点吗?基本上注释=注释+“废话”
最佳答案
使用 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
关于sqlite - 如何让SQLite触发器修改现有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610606/