Rozwiązanie Hermana zadziałało dla mnie, ale ...
trochę mnie pomieszało. Załączam wersję demonstracyjną, którą opracowałem na podstawie jego odpowiedzi. Dodatkowe funkcje w mojej odpowiedzi obejmują obsługę kluczy obcych, automatyczne zwiększanie kluczy i użycie last_insert_rowid()
funkcji w celu uzyskania ostatniego automatycznie wygenerowanego klucza w transakcji.
Moje zapotrzebowanie na te informacje pojawiło się, gdy trafiłem na transakcję wymagającą trzech kluczy obcych, ale mogłem uzyskać tylko ostatni z nich last_insert_rowid()
.
PRAGMA foreign_keys = ON;
PRAGMA temp_store = 2;
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;