Sqlite rowid>太多级别的触发器递归,但触发器工作正常?

时间:2016-03-27 18:36:50

标签: sqlite recursion

我有一张桌子: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

我收到错误:触发器递归的级别太多

现在我的问题是,如果它无法处理至少一百万个选项,触发点是什么意思?有没有办法解决这个问题,或者我应该自己插入每一行:)

1 个答案:

答案 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;