Come posso accedere all'ultimo ID riga inserito all'interno di uno script SQL?

StackOverflow https://stackoverflow.com/questions/1822135

  •  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?

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top