Недавно нам потребовалось добавить столбцы в некоторые из существующих таблиц базы данных SQLite. Это можно сделать с помощью ALTER TABLE ADD COLUMN
. Конечно, если таблица уже была изменена, мы хотим оставить ее в покое. К сожалению, SQLite не поддерживает предложение IF NOT EXISTS
на ALTER TABLE
.
Нашим текущим решением является выполнение инструкции ALTER TABLE и игнорирование любых ошибок "дублированного столбца", как этот пример Python (но на С++).
Однако наш обычный подход к настройке схем баз данных состоит в том, чтобы иметь .sql script, содержащий операторы CREATE TABLE IF NOT EXISTS
и CREATE INDEX IF NOT EXISTS
, которые могут быть выполнены с помощью sqlite3_exec
или инструмента командной строки sqlite3
. Мы не можем помещать ALTER TABLE
в эти файлы script, потому что, если этот оператор терпит неудачу, ничего после его выполнения не будет.
Я хочу иметь определения таблиц в одном месте и не разбивать файлы .sql и .cpp. Есть ли способ написать обходной путь для ALTER TABLE ADD COLUMN IF NOT EXISTS
в чистом SQLite SQL?