2009-02-10 9 views
70

Je suis en train de porter cette ligne à partir de MS SQL Server pour SQLiteComment faire SINON EXISTE dans SQLite

IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received') 
    INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received'); 

Il semble que SQLite ne supporte pas SINON EXISTE ou du moins je ne peux pas le faire travail. Ai-je manqué quelque chose de simple? Y at-il un travail autour?

Répondre

108

Que pensez-vous de cela?

INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received' 

(. Untested que je n'ai pas SQLite ... mais this link est assez descriptif)

De plus, cela devrait aussi fonctionner:

INSERT INTO EVENTTYPE (EventTypeName) 
SELECT 'ANI Received' 
WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received'); 
+12

Merci. Cependant, il convient de noter que la commande INSERT OR IGNORE ne fonctionne que si EventTypeName est défini comme étant unique. – AngryHacker

+2

True. J'ai supposé que c'était unique étant donné qu'il était utilisé dans l'exemple SQL. Sinon, la deuxième méthode devrait être utilisée. – beach

+0

La deuxième méthode peut-elle être réellement utilisée si EventTypeName n'est pas unique? J'essaie de faire quelque chose de similaire et je trouve que la clause SELECT WHERE NOT EXISTS renvoie plusieurs lignes, en fait chaque ligne où (l'équivalent de) EventTypeName! = 'ANI Received' est vrai. – Michael

1

Vous pouvez également définir une contrainte sur une table avec les champs KEY et définir sur le conflit "Ignorer"

Lorsqu'une violation de contrainte applicable se produit, le IGNORE résolution algorithme ignore la ligne qui contient la violation de contrainte et continue le traitement des lignes suivantes de l'instruction SQL comme si rien ne s'est mal passé. Les autres lignes avant et après la ligne contenant la violation de contrainte sont insérées ou mises à jour normalement. Aucune erreur n'est renvoyée lorsque l'algorithme de résolution de conflit IGNORE est utilisé.

SQLite Documentation

4

Si vous voulez ignorer l'insertion de valeur existante, il doit y avoir un champ clé dans votre tableau. Il suffit de créer une table avec clé primaire comme:

CREATE TABLE IF NOT EXISTS TblUsers (UserId INTEGER PRIMARY KEY, UserName varchar(100), ContactName varchar(100),Password varchar(100)); 

Et puis insérez ou remplacer/Insérer ou Ignorer la requête sur la table comme:

INSERT OR REPLACE INTO TblUsers (UserId, UserName, ContactName ,Password) VALUES('1','UserName','ContactName','Password'); 

Il ne le laissera pas Entrez à nouveau EXISTANT primaire Valeur clé ... Voici comment vous pouvez vérifier si une valeur existe dans la table ou non.

Questions connexes