2014-03-03 136 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;