http://en.wikipedia.org/wiki/Upsert
SQL Server'da depolanan proc güncellemesini ekle
Bunu düşünmediğim SQLite'de yapmanın akıllıca bir yolu var mı?
Temel olarak kayıt varsa dört sütundan üçünü güncellemek istiyorum, yoksa, dördüncü sütun için varsayılan (NUL) değeri ile kayıt INSERT istiyorum.
Kimlik birincil anahtardır, bu nedenle UPSERT için yalnızca bir kayıt olacaktır.
(Ben açıkça UPDATE veya INSERT gerekip gerekmediğini belirlemek için SELECT yükünü önlemek için çalışıyorum)
Öneriler?
SQLite sitesindeki sözdiziminin TABLE CREATE için onaylayamıyorum. Test etmek için bir demo oluşturmadım, ancak desteklenmiyor gibi görünüyor.
Öyleyse, üç sütun var, bu yüzden aslında şöyle görünecektir:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
ancak ilk iki leke bir çatışmaya neden olmaz, sadece ID olurdu Blob1 ve Blob2 değiştirilmeyecek
Bağlama verileri tam bir işlem olduğunda SQLite'deki UPDATE'ler, yani güncellenecek her gönderilen satır şunları gerektirir: INSERT'ten farklı olarak reset fonksiyonunun kullanılmasına izin veren ifadeleri Hazırla / Bağla / Adım / Sonlandır
Bir ifade nesnesinin ömrü şöyle bir şeydir:
- Sqlite3_prepare_v2 () kullanarak nesneyi oluşturun
- Sqlite3_bind_ arabirimlerini kullanarak değerleri host parametrelerine bağlayın.
- Sqlite3_step () öğesini çağırarak SQL'i çalıştırın
- Sqlite3_reset () öğesini kullanarak ifadeyi sıfırlayın, ardından 2. adıma dönün ve tekrarlayın.
- Sqlite3_finalize () öğesini kullanarak deyim nesnesini yok edin.
GÜNCELLEME Ben INSERT ile karşılaştırıldığında yavaş olduğunu, ancak Birincil anahtar kullanarak SELECT ile nasıl karşılaştırılır?
Belki de 4. sütunu (Blob3) okumak için seçin ve sonra ilk 4 sütun için yeni verilerle orijinal 4. Sütun harmanlayan yeni bir kayıt yazmak için REPLACE kullanmalıyım?