La solution d'Herman a fonctionné pour moi, mais cela ...
m'a un peu mélangé. J'inclus la démo que j'ai élaborée en fonction de sa réponse. Les fonctionnalités supplémentaires de ma réponse incluent la prise en charge des clés étrangères, les clés à incrémentation automatique et l'utilisation de la last_insert_rowid()
fonction pour obtenir la dernière clé générée automatiquement dans une transaction.
Mon besoin de ces informations est apparu lorsque j'ai frappé une transaction qui nécessitait trois clés étrangères, mais je ne pouvais obtenir que la dernière avec 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;