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

标签 sqlite database-trigger

我正在使用SQlite,并且已经有table1:

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


根据表1中的信息,我想使用查询以最佳方式生成表2:

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


我研究过的选项:


用户定义的函数-无法执行,因为我现在无法更新二进制文件。否则,这是可能的,因为当我执行第一个表时,我也可以在C ++中创建第二个表。
简要介绍一下使用触发器,假设我可以允许用户仅将(2, pear, Nashi)之类的记录插入到table2中,并使用INSTEAD OF触发器,该触发器将基于计数插入适当数量的记录。但是,看来我不能在表上使用INSTEAD OF触发器。
研究过是否可以找到一种在sqlite中运行循环的方法,但看来我的机会很渺茫。


我可能不知道有一个更简单的解决方案。非常感谢您的帮助。

最佳答案

使用递归触发器和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;

关于sqlite - 使用触发器在SQlite中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44017732/

相关文章:

android - 我可以从 Flutter 导出我的 sqlite 数据库吗?

MySQL 表示 : #1336 - Dynamic SQL is not allowed in stored function or trigger

mysql - 在 mysql 上创建触发器时,存储函数或触发器问题中​​不允许使用动态 SQL

php - 根据另一个表引用 ID 更新/插入大表记录。

node.js - 如何从 Sequelize 查询中删除双引号?

sqlite - Phonegap/SQLite 没有 CacheGroups、Caches、Origins 和 DeletedCacheResources 的此类表错误

mysql - 在触发器中打印声明的变量

PHP mysql条件唯一约束?

Java 准备好的语句未输入数据并命中捕获

c++ - C++ 的 SQLite 替代方案