我有一个表:MYTABLE(ID int);
我使用这个查询在mytable:中生成N个rowid
create trigger mytrigger after insert on MYTABLE
when new.id < 1000
begin
insert into MYTABLE select max(id)+1 from MYTABLE;
end;
insert into MYTABLE values (1);
它工作得很好,sqlite会为我生成一个从1到1000的rowid。
但当我退役时:
when new.id < 1000
具有较大的数字,如:
when new.id < 10000000
我收到一个错误:触发递归的级别太多
现在我的问题是,如果一个触发器不能处理至少一百万个选项,它有什么意义?有什么方法可以解决这个问题吗?或者我应该自己插入每一行:)
触发器并不意味着具有任意级别的递归。
任意递归的机制是递归公共表表达式:
INSERT INTO MyTable(id)
WITH RECURSIVE n(i) AS (
SELECT 1
UNION ALL
SELECT i + 1 FROM n WHERE i < 1000
)
SELECT i FROM n;