2009-11-30 9 views
8

SQLite kullanıyorum ve özellikleri için bir tablo ve alt özellikler için bir tablo var. Her alt özellik, fkPropertyId sütununu kullanarak üst öğesine işaret eder. Şu anda, ilk veritabanı oluşturmak için, ben şuna benzer bir senaryo var:Son eklenen satır kimliğine bir SQL komut dosyasında nasıl erişebilirim?

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

Şimdi, sabit kodlu rowID kurtulmak istiyoruz, bu yüzden böyle bir şey olurdu:

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

Burada x, tablonun en son eklenen satırını belirtir. Şu anda bu komut dosyasını yazmanın daha iyi (ve daha teknik olarak doğru) bir yolu var mı?

cevap

4

Peki, Ben Ben S'den kullanılan last_insert_rowid fonksiyonu ile geldi çözüm: en iyi yaklaşım, ama eğer o inşaat

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

emin değil Benim için ve geçici veri depolama için ekstra tablolar kullanmaz.

26

last_insert_rowid işlevini kullanın:

SELECT last_insert_rowid(); 
+0

Üç üst üste ek için bu değeri nasıl saklarım? –

+0

Önce özellik satırını, ardından alt mülkü ekleyin. Birden fazla ekleme için özellik kimliğini hatırlamanız gerekiyorsa, alt mülk ekleme yapmadan önce onu bir değişkene atayın. –

+1

benim problemim bu bir sqlite betiğidir ve bildiğim kadarıyla sqlite komut dosyalarındaki kullanıcı değişkenlerini desteklemiyor –