如果一个表有很多on insert
触发器。当我使用 sqlite 将值插入表中时,我可以指定首先执行哪个触发器吗?
我想组合我的触发器,但问题是我when
对每个触发器都有不同的语句,如果我正确理解了文档when
,则语句在我的update
/insert
等语句之前。
CREATE TRIGGER trigger_name AFTER INSERT ON table_name
WHEN expr
BEGIN
update-stmt;
END;
将所有触发器合并为一个:
CREATE TRIGGER some_trigger
AFTER INSERT ON some_table
FOR EACH ROW BEGIN
-- statement 1;
-- statement 2;
-- statement 3;
...
-- statement n;
END;
如果触发器是要进行更新,如 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 语句结果的第一行。)