2009-11-30 18 views
8

Estoy usando SQLite, y tengo una tabla para las propiedades y una tabla para las subpropiedades. Cada sub-propiedad apunta a su padre utilizando la columna fkPropertyId. En este momento, para crear la base de datos inicial, tengo un script que se ve algo como esto:¿Cómo puedo acceder a la última identificación de fila insertada dentro de una secuencia de comandos SQL?

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,.....); 

Ahora, yo quiero para deshacerse de la rowid no modificable, por lo que sería algo así como:

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,.....); 

Cuando x se refiere a la última rowid insertado en la tabla de propiedades. En este momento, eso es

(SELECT MAX(rowId) FROM property) 

¿Hay alguna forma mejor (y más precisa técnicamente) de escribir este script?

Respuesta

4

Bueno, la solución que se me ocurrió utilizado la función last_insert_rowid de 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,.....); 

No estoy seguro si eso es el mejor enfoque, pero funciona para mí, y no utiliza ninguna tabla adicional para el almacenamiento temporal de datos.

26

Utilice la función last_insert_rowid:

SELECT last_insert_rowid(); 
+0

¿Cómo puedo mantener ese valor para tres inserciones consecutivas? –

+0

Simplemente inserte la fila de propiedad primero, luego la subpropiedad. Si necesita recordar el ID de propiedad para más de un inserto, asígnelo a una variable antes de hacer las inserciones de subpropiedad. –

+1

mi problema es que este es un script sqlite y, hasta donde yo sé, sqlite no admite variables de usuario en scripts –

Cuestiones relacionadas