SQLite3在插入的vlaue上多次运行触发器插入

SQLite3在插入的vlaue上多次运行触发器插入,sqlite,triggers,Sqlite,Triggers,要运行insert n次,n由另一个表上的insert值定义。 表1: 现在,当我插入到表_1中时,如下所示: INSERT INT table_1 (name, keys_number) VALUES ('dummy_name', 5) 要启动触发器吗 CREATE TRIGGER insert_keys_after_insert_table_1 AFTER INSERT ON table_1 WHEN (SELECT COUNT(*) FROM table_2 WHERE t

要运行insert n次,n由另一个表上的insert值定义。 表1:

现在,当我插入到表_1中时,如下所示:

INSERT INT table_1 (name, keys_number) VALUES ('dummy_name', 5)
要启动触发器吗

CREATE TRIGGER insert_keys_after_insert_table_1
   AFTER INSERT ON table_1
    WHEN (SELECT COUNT(*) FROM table_2 WHERE table_1_id=new.id) < new.keys_number
BEGIN
INSERT INTO keys (table_1_id) VALUES (new.id);
END;
使结果如下所示:

id;name;keys_number
1;dummy_name_1;5
触发后表2上的结果应为

id;table_1_id
1;1
2;1
3;1
4;1
5;1
或者如果我在表1中插入另一个

INSERT INT table_1 (name, keys_number) VALUES ('dummy_name_2', 2)
将使表_1上的结果如下所示:

INSERT INT table_1 (name, keys_number) VALUES ('dummy_name', 5)
身份证;名称钥匙号码

1;dummy_name_1;5
2;dummy_name_2;2
触发器将给出表2上的结果: 身份证件表1\u id

1;1
2;1
3;1
4;1
5;1
6;2
7;2

对于这个需求,您需要一个循环,它在SQL中是通过。 不幸的是

一种解决方法是创建一个只有1列的新表,该表将数字1存储为表\u 1中键\u number的最大期望值:

现在您可以创建触发器:

CREATE TRIGGER insert_keys_after_insert_table_1 AFTER INSERT ON table_1
BEGIN
  INSERT INTO table_2(table_1_id) 
  SELECT NEW.id
  FROM table_numbers
  WHERE keys_number <= NEW.keys_number - (SELECT COUNT(*) FROM table_2 WHERE table_1_id = NEW.id);
END;
请参阅。

插入密钥表中的密钥是什么\u 1\u id VALUES new.id;?同时检查您最后的预期结果。最后两行正确吗?
CREATE TABLE table_numbers AS
WITH cte(keys_number) AS (
  SELECT 1 
  UNION ALL 
  SELECT keys_number + 1 FROM cte WHERE keys_number < 100 -- change 100 to the max keys_number you expect
)
SELECT keys_number FROM cte
CREATE TRIGGER insert_keys_after_insert_table_1 AFTER INSERT ON table_1
BEGIN
  INSERT INTO table_2(table_1_id) 
  SELECT NEW.id
  FROM table_numbers
  WHERE keys_number <= NEW.keys_number - (SELECT COUNT(*) FROM table_2 WHERE table_1_id = NEW.id);
END;