http://en.wikipedia.org/wiki/Upsert
Insérer le processus stocké de mise à jour sur SQL Server
Existe-t-il un moyen intelligent de le faire dans SQLite auquel je n'ai pas pensé?
Fondamentalement, je veux mettre à jour trois des quatre colonnes si l'enregistrement existe, s'il n'existe pas, je veux INSÉRER l'enregistrement avec la valeur par défaut (NUL) pour la quatrième colonne.
L'ID est une clé primaire, il n'y aura donc qu'un seul enregistrement sur UPSERT.
(J'essaie d'éviter la surcharge de SELECT afin de déterminer si j'ai besoin de METTRE À JOUR ou INSÉRER évidemment)
Suggestions?
Je ne peux pas confirmer cette syntaxe sur le site SQLite pour TABLE CREATE. Je n'ai pas construit de démo pour le tester, mais il ne semble pas être supporté ..
Si c'était le cas, j'ai trois colonnes, donc cela ressemblerait à:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
mais les deux premiers blobs ne causeront pas de conflit, seul l'ID serait donc je asusme Blob1 et Blob2 ne seraient pas remplacés (comme souhaité)
UPDATEs dans SQLite lorsque les données de liaison sont une transaction complète, ce qui signifie que chaque ligne envoyée à mettre à jour nécessite: Préparer / Lier / Étape / Finaliser les instructions contrairement à INSERT qui permet l'utilisation de la fonction de réinitialisation
La vie d'un objet de déclaration ressemble à ceci:
- Créez l'objet à l'aide de sqlite3_prepare_v2 ()
- Liez les valeurs aux paramètres de l'hôte à l'aide des interfaces sqlite3_bind_.
- Exécutez le SQL en appelant sqlite3_step ()
- Réinitialisez l'instruction à l'aide de sqlite3_reset (), puis revenez à l'étape 2 et répétez.
- Détruisez l'objet de déclaration à l'aide de sqlite3_finalize ().
UPDATE Je suppose que c'est lent par rapport à INSERT, mais comment se compare-t-il à SELECT en utilisant la clé primaire?
Peut-être devrais-je utiliser la sélection pour lire la 4e colonne (Blob3) puis utiliser REMPLACER pour écrire un nouvel enregistrement mélangeant la 4e colonne d'origine avec les nouvelles données pour les 3 premières colonnes?