4

如果一个表有很多on insert触发器。当我使用 sqlite 将值插入表中时,我可以指定首先执行哪个触发器吗?

我想组合我的触发器,但问题是我when对每个触发器都有不同的语句,如果我正确理解了文档when,则语句在我的update/insert等语句之前。

CREATE TRIGGER trigger_name AFTER INSERT ON table_name
WHEN expr
BEGIN
    update-stmt;
END;
4

2 回答 2

1

将所有触发器合并为一个:

CREATE TRIGGER some_trigger
AFTER INSERT ON some_table
FOR EACH ROW BEGIN
    -- statement 1;
    -- statement 2;
    -- statement 3;
    ...
    -- statement n;
END;
于 2013-05-03T01:24:34.583 回答
0

如果触发器是要进行更新,如 OP 的示例中所示,那么这将无济于事。但是,如果每个触发器只是检查某些内容并可能引发错误,我认为这是一种很常见的情况,那么可以将它们全部打包到一个触发器过程中(具有隐式执行顺序),并对每个触发器使用不同的表达式:

CREATE TRIGGER some_trigger
AFTER INSERT ON some_table
BEGIN
SELECT RAISE(FAIL, "error message one") WHERE (<select-statement-one>) == <value-one>;
SELECT RAISE(FAIL, "error message two") WHERE (<select-statement-two>) == <value-two>;
...
END;

(请记住,子查询表达式的值是封闭的 SELECT 语句结果的第一行。)

于 2020-04-13T11:10:30.240 回答