Come posso accedere all'ultimo ID riga inserito all'interno di uno script SQL?
-
10-07-2019 - |
Domanda
Sto usando SQLite e ho una tabella per le proprietà e una tabella per le proprietà secondarie. Ogni sotto-proprietà punta al suo genitore usando la colonna fkPropertyId. In questo momento, per creare il database iniziale, ho uno script che assomiglia a questo:
INSERT INTO property VALUES(1,.....);
INSERT INTO property VALUES(2,.....);
INSERT INTO property VALUES(3,.....);
INSERT INTO subproperty VALUES(1,.....,3);
INSERT INTO subproperty VALUES(2,.....,3);
INSERT INTO subproperty VALUES(3,.....,3);
INSERT INTO property VALUES(4,.....);
Ora, voglio sbarazzarmi dell'ID riga codificato, quindi sarebbe qualcosa del tipo:
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO subproperty VALUES(NULL,.....,X);
INSERT INTO property VALUES(NULL,.....);
Dove x si riferisce all'ultima rigaId inserita nella tabella delle proprietà. In questo momento, questo è
(SELECT MAX(rowId) FROM property)
Esiste un modo migliore (e tecnicamente più accurato) per scrivere questo script?
Soluzione 2
Bene, la soluzione che ho trovato ha usato la funzione last_insert_rowid
di Ben S:
INSERT INTO property VALUES(NULL,.....);
INSERT INTO property VALUES(NULL,.....);
INSERT INTO subproperty VALUES(1,.....,-1);
INSERT INTO subproperty VALUES(2,.....,-1);
INSERT INTO subproperty VALUES(3,.....,-1);
INSERT INTO property VALUES(NULL,.....);
UPDATE subproperty SET fkPropertyId = (SELECT last_insert_rowid()) WHERE fkPropertyId=-1;
INSERT INTO property VALUES(NULL,.....);
Non sono sicuro che sia l'approccio migliore, ma funziona per me e non utilizza tabelle extra per l'archiviazione temporanea dei dati.
Altri suggerimenti
Utilizza la funzione last_insert_rowid
:
SELECT last_insert_rowid();