使用触发器在SQlite中插入多行

时间:2017-05-17 06:59:41

标签: sqlite database-trigger

我使用的是SQlite,我已经 table1

Count  | Fruit | Variety
------ |------ |--------
     2 | Pear  | Nashi
     3 | Plum  | Garnet

根据表1中的信息,我希望使用查询以最佳方式生成 table2

Count  | Fruit | Variety
------ |------ |--------
     1 | Pear  | Nashi
     1 | Pear  | Nashi
     1 | Plum  | Garnet
     1 | Plum  | Garnet
     1 | Plum  | Garnet

我调查过的选项:

  1. 用户定义的功能 - 不可能,因为我现在无法更新二进制文件。否则,这是可能的,因为我可以在第一次使用C ++时创建第二个表。
  2. 简要介绍一下使用触发器,假设我可以允许用户只将(2, pear, Nashi)这样的记录插入到table2中,并使用INSTEAD OF触发器,该触发器将根据以下内容插入适当数量的记录计数。但是,看起来我无法在桌面上使用INSTEAD OF触发器。
  3. 研究过我是否能找到一种在sqlite中运行循环的方法,但看起来我的机会很惨淡。
  4. 可能是一个我不了解的更简单的解决方案。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

这可以通过递归触发器和table2RCount)中的其他列来计算必须运行的剩余触发器数量:

PRAGMA recursive_triggers = ON;  -- must be executed in every connection

CREATE TRIGGER tr1
AFTER INSERT ON table1
BEGIN
    INSERT INTO table2(Count, Fruit, Variety, RCount)
    VALUES (1, NEW.Fruit, NEW.Variety, NEW.Count);
END;

CREATE TRIGGER tt2
AFTER INSERT ON table2
WHEN NEW.RCount > 1
BEGIN
    INSERT INTO table2(Count, Fruit, Variety, RCount)
    VALUES (1, NEW.Fruit, NEW.Variety, NEW.RCount - 1);
END;