Как сделать ЕСЛИ НЕ СУЩЕСТВУЕТ В SQLite

Я пытаюсь перенести эту строку с MS SQL Server на SQLite

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

Кажется, SQLite не поддерживает IF NOT EXISTS или, по крайней мере, я не могу заставить его работать. Я что-то пропустил? Есть ли способ обхода?

Ответ 1

Как насчет этого?

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

(Untested, поскольку у меня нет SQLite... однако эта ссылка довольно описательна.)

Кроме того, это также должно работать:

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

Ответ 2

Если вы хотите игнорировать вставку существующего значения, в таблице должно быть поле Key. Просто создайте таблицу с полем первичного ключа Like:

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

И затем вставьте или замените/вставьте или проигнорируйте запрос в таблице Like:

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

Это не позволит ему повторно ввести существующее значение основного ключа... Это как вы можете проверить, существует ли значение в таблице или нет.

Ответ 3

Вы также можете установить ограничение на таблицу с полями KEY и установить On Conflict "Ignore"

При наличии соответствующего нарушения ограничений разрешение IGNORE алгоритм пропускает одну строку, содержащую нарушение ограничения и продолжает обработку последующих строк инструкции SQL, как если бы ничего не получилось. Другие строки до и после строки, содержащей нарушение ограничений вставляется или обновляется в обычном режиме. Ошибка отсутствует. возвращается, когда используется алгоритм разрешения конфликта IGNORE.

Документация SQLite