2009-02-10 14 views
70

Sto cercando di porto questa linea da MS SQL Server per SQLiteCome fare se non esiste in SQLite

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

Sembra che SQLite non supporta SE NON ESISTE o almeno io non ce la fa lavoro. Mi manca qualcosa di semplice? C'è una soluzione?

risposta

108

Che ne dici di questo?

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

(. Testato come non ho SQLite ... però this link è abbastanza descrittivo)

Inoltre, questo dovrebbe funzionare anche:

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

Grazie. Tuttavia, si noti che il pezzo INSERT O IGNORE funziona solo se EventTypeName è impostato come univoco. – AngryHacker

+2

Vero. Supponevo che fosse unico dato come era usato nell'SQL di esempio. In caso contrario, dovrebbe essere utilizzato il secondo metodo. – beach

+0

È possibile utilizzare il secondo metodo se EventTypeName non è univoco? Sto cercando di fare qualcosa di simile e trovo che la clausola SELECT WHERE NOT EXISTS restituisca più righe, infatti ogni riga dove (l'equivalente di) EventTypeName! = 'ANI Received' è vera. – Michael

1

È anche possibile impostare un vincolo su una tabella con i campi KEY e impostato su Conflitto "Ignora"

Quando si verifica una violazione del vincolo applicabile, il L'algoritmo della risoluzione IGNORE salta la riga che contiene la violazione del vincolo e continua a elaborare le righe successive dell'istruzione SQL come se lo non fosse andato storto. Altre righe prima e dopo la riga che contenevano la violazione del vincolo vengono inserite o aggiornate normalmente. Nessun errore è restituito quando viene utilizzato l'algoritmo di risoluzione dei conflitti IGNORE.

SQLite Documentation

4

Se si desidera ignorare l'inserimento del valore esistente, ci deve essere un campo chiave nella tabella. Basta creare una tabella con chiave primaria Field Ti piace:

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

E poi inserire o sostituire/Inserire o ignorare query sul tavolo come:

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

non sarà Let it reinserire il principale esistente chiave Valore ... Ecco come è possibile verificare se esiste un valore nella tabella o meno.