2014-03-03 102 views
0

在一个大型的数据库,我使用的是类似这样一个很长的查询:如何在SQLite中检索多个last_insert_rows?

INSERT INTO t VALUES (@p_1); SELECT last_insert_rowid() as i_1; 
INSERT INTO t VALUES (@p_2); SELECT last_insert_rowid() as i_2; 
... 

这允许无限更快的插入比单交易。然而,我很惊讶,只有一个值返回而不是每SELECT一个。

通常,这是一个非问题,因为它很容易只使用一个rowid并从中计算其他值(autoincrement问题可能是一个例外)。但是,为了理解(并忽视我可能会滥用SQLite):为什么会发生这种情况,我怎么能在一次事务中使用多个SELECT

+0

http://stackoverflow.com/questions/8039185是一个相关的问题,但是,它似乎并不适用于此。 – mafu

回答

1

尝试使用临时表像下面

PRAGMA temp_store = MEMORY; 
CREATE TEMP TABLE TempIds (id INTEGER); 

INSERT INTO t VALUES (@p_1); INSERT INTO TempIds VALUES(last_insert_rowid()); 
INSERT INTO t VALUES (@p_2); INSERT INTO TempIds VALUES(last_insert_rowid()); 
... 

SELECT id FROM TempIds;