0

首先,我直接在 SQLite 数据库管理软件中进行查询。因此,在我的情况下,任何编程语言的使用都是不可能的,我唯一的选择是使用触发器。

我的数据库有一个名为Article的表,我想在不达到触发器的递归限制的情况下填充n 个虚拟对象以用于测试目的(限制我无法更改,因为我必须重新编译数据库)。我想,通过阅读官方文档,这个限制默认固定为 500。

到目前为止,我已经创建了一个函数触发器,但在n插入后我无法停止它的递归:

CREATE TRIGGER 'myTrigger' 
AFTER INSERT ON 'Article' 
WHEN (insertedRowNumber < 500) 
BEGIN 
    INSERT INTO Article(...) VALUES(...); 
END;

Article表结构不包含任何类型的时间戳,并且无法更改,因为数据库已经部署用于生产。

如何限制使用我提供的触发模式插入的行数?

谢谢您的帮助 !

4

1 回答 1

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);

它将插入 500 条记录Article

于 2013-11-04T16:24:30.547 回答