SQLite3在插入的vlaue上多次运行触发器插入
要运行insert n次,n由另一个表上的insert值定义。 表1: 现在,当我插入到表_1中时,如下所示: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 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;