我有一张桌子: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
我收到错误:触发器递归的级别太多
现在我的问题是,如果它无法处理至少一百万个选项,触发点是什么意思?有没有办法解决这个问题,或者我应该自己插入每一行:)
答案 0 :(得分:1)
触发器并不意味着具有任意级别的递归。
任意递归的机制是recursive common table expressions:
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;