Как это сделать, если не существует в SQLite

72

Я пытаюсь перенести эту строку с 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 или, по крайней мере, я не могу заставить его работать. Я что-то пропустил? Есть ли способ обхода?

Теги:

3 ответа

105
Лучший ответ

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

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');
  • 13
    Благодарю. Однако следует отметить, что фрагмент INSERT OR IGNORE работает только в том случае, если для EventTypeName задано уникальное значение.
  • 2
    Правда. Я предположил, что он уникален, учитывая то, как он использовался в примере SQL. Если нет, следует использовать второй метод.
Показать ещё 4 комментария
5

Если вы хотите игнорировать вставку существующего значения, в таблице должно быть поле 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');

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

1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню