sqlite - 如何让SQLite触发器修改现有字符串

标签 sqlite triggers

我有一个 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/

相关文章:

r - 使用 RSQLite 在 R 中加载 SQLite 表

ios - SQLite 查询在 iPhone 中不起作用

SQLite 全文虚拟表正常可用吗?

java - 在 DAO 模式中放置交易的位置

mysql - 为 MySQL 数据库中的表创建触发器(语法错误)

Mysql触发器不起作用

android - 如何在 SQLite 中将毫秒转换为日期

jquery触发悬停在 anchor 上

regex - 在使用 $variable 和 ${variable} 之间在正则表达式中传递变量时,Perl 有什么区别

mysql - 无法在 Google Cloud 中的 MySql 表上创建触发器