A solução de Herman funcionou para mim, mas ...
me confundiu um pouco. Estou incluindo a demonstração que desenvolvi com base na resposta dele. Os recursos adicionais em minha resposta incluem suporte para chave estrangeira, chaves de incremento automático e uso da last_insert_rowid()
função para obter a última chave gerada automaticamente em uma transação.
Minha necessidade dessa informação surgiu quando achei uma transação que exigia três chaves estrangeiras, mas só consegui obter a última com last_insert_rowid()
.
PRAGMA foreign_keys = ON; -- sqlite foreign key support is off by default
PRAGMA temp_store = 2; -- store temp table in memory, not on disk
CREATE TABLE Foo(
Thing1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
);
CREATE TABLE Bar(
Thing2 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
FOREIGN KEY(Thing2) REFERENCES Foo(Thing1)
);
BEGIN TRANSACTION;
CREATE TEMP TABLE _Variables(Key TEXT, Value INTEGER);
INSERT INTO Foo(Thing1)
VALUES(2);
INSERT INTO _Variables(Key, Value)
VALUES('FooThing', last_insert_rowid());
INSERT INTO Bar(Thing2)
VALUES((SELECT Value FROM _Variables WHERE Key = 'FooThing'));
DROP TABLE _Variables;
END TRANSACTION;