web-dev-qa-db-fra.com

Comment faire SI PAS EXISTE dans SQLite

J'essaie de porter cette ligne de MS SQL Server vers 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 IF NOT EXISTS ou du moins, je ne peux pas le faire fonctionner. Est-ce que je manque quelque chose de simple? Y at-il un travail autour?

76
AngryHacker

Que dis-tu de ça?

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

(Non testé car je n'ai pas SQLite ... cependant ce lien est assez descriptif.)

De plus, cela devrait également fonctionner:

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

Si vous souhaitez ignorer l'insertion d'une valeur existante, il doit y avoir un champ Key dans votre table. Il suffit de créer une table avec un champ de 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érer 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 vous laissera pas ré-entrer la valeur de clé primaire existante ... C'est ainsi que vous pouvez vérifier si une valeur existe ou non dans la table.

10
TheDean

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

Lorsqu'une violation de contrainte applicable se produit, l'algorithme de résolution IGNORE ignore la seule ligne contenant la violation de contrainte et poursuit le traitement des lignes suivantes de l'instruction SQL comme si rien ne s'était 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é.

Documentation SQLite

1
Ilber