solución de Herman trabajó para mí, pero el ...
me había mezclado un poco. Incluyo la demo que trabajé en función de su respuesta. Las características adicionales en mi respuesta incluyen soporte de clave externa, incremento automático de claves y uso de la función last_insert_rowid()
para obtener la última clave generada automáticamente en una transacción.
Mi necesidad de esta información surgió cuando pulsé una transacción que requería tres claves foráneas, pero solo pude obtener la última con 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;
sqlite no es compatible con esto. –