2009-02-10 31 views
70

Estoy tratando de puerto de esta línea de MS SQL Server para SQLite¿Cómo hacer si no existe en SQLite

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

Parece que SQLite no soporta SI NO EXISTE o por lo menos no puede hacerlo trabajo. ¿Me estoy perdiendo algo simple? ¿Hay alguna solución?

Respuesta

108

¿Qué tal esto?

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

(. No comprobado que no tengo SQLite ... sin embargo this link es bastante descriptiva)

Además, este debe también trabajar:

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

Gracias. Sin embargo, debe tenerse en cuenta que la pieza INSERTAR O IGNORAR solo funciona si EventTypeName se establece como único. – AngryHacker

+2

Es cierto. Supuse que era único dado cómo se usaba en el ejemplo de SQL. Si no, se debe usar el segundo método. – beach

+0

¿Se puede usar realmente el segundo método si EventTypeName no es único? Estoy intentando hacer algo similar y me parece que la cláusula SELECT WHERE NOT EXISTS devuelve varias filas, de hecho, cada fila donde (el equivalente de) EventTypeName! = 'ANI Received' es verdadero. – Michael

1

También puede establecer una restricción en una tabla con los campos clave y establecer en conflicto "Ignorar"

Cuando se produce una violación de restricción aplicable, la IGNORE el algoritmo de resolución omite la fila que contiene la violación de restricción y continúa procesando las siguientes filas de la instrucción SQL como si no hubiera salido nada. Otras filas antes y después de la fila que contenía la violación de restricción se insertan o actualizan normalmente. No se devuelve ningún error cuando se utiliza el algoritmo IGNORE de resolución de conflictos.

SQLite Documentation

4

Si desea ignorar la inserción de valor existente, debe haber un campo clave en su tabla. Basta con crear una tabla con campo de clave principal como:

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

y luego insertar o reemplazar/insertar o hacer caso omiso de consulta en la mesa como:

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

It Will no dejar que vuelva a ingresar el principal existente Valor clave ... Así es como se puede verificar si un valor existe en la tabla o no.

Cuestiones relacionadas