首先,我直接在SQLite数据库管理软件中查询。因此,在我的情况下,任何编程语言的使用都是不可能的,我唯一的选择就是使用触发器。
我的数据库有一个名为 Article 的表格,我希望用 n 虚拟对象填充测试purpposes而不会达到触发器的递归限制(限制我无法改变,因为我将不得不重新编译数据库)。我想通过阅读官方文档,这个限制默认固定为500.
到目前为止,我已经创建了一个函数触发器,但是在 n 插入后我无法停止它的递归:
CREATE TRIGGER 'myTrigger'
AFTER INSERT ON 'Article'
WHEN (insertedRowNumber < 500)
BEGIN
INSERT INTO Article(...) VALUES(...);
END;
文章表结构不包含任何类型的时间戳,因为数据库已经部署用于生产,所以无法更改。
如何限制使用我提供的触发器模式插入的行数?
感谢您的帮助!
答案 0 :(得分:0)
如果您可以限制Article
中的条目而不是插入次数,只需:
CREATE TRIGGER myTrigger AFTER INSERT ON Article WHEN ((SELECT COUNT() FROM Article)<500) BEGIN INSERT INTO Article(...) VALUES(...); END;
另一个选择是使用辅助视图:
CREATE VIEW hlpArticle(a, ..., z, hlpCnt) AS SELECT a, ..., z, 1 AS hlpCnt FROM Article;
CREATE TRIGGER hlpTrigger INSTEAD OF INSERT ON hlpArticle WHEN (NEW.hlpCnt>0) BEGIN
INSERT INTO Article(a, ..., z) VALUES(NEW.a, ..., NEW.z);
INSERT INTO hlpArticle(a, ..., z) VALUES(NEW.a, ..., NEW.z, NEW.hlpCnt-1);
END;
所以当你这样做时:
INSERT INTO hlpArticle(a, ..., z, hlpCnt) VALUES('val_a', ..., 'val_z', 500);
它会在Article
上插入500条记录。