В sqlite Как добавить столбец в таблицу, если такой же столбец не существует в таблице - PullRequest
6 голосов
/ 08 января 2011

Как добавить столбец в таблицу SQLite, если и только если такой столбец не существует в таблице?

Использование ALTER TABLE Я могу создать новый столбец, но хочу знать, какпроверить, существует ли этот столбец в таблице или нет?

Ответы [ 4 ]

7 голосов
/ 08 января 2011

SQLite возвращает ошибку типа «нет такого столбца: foo», если таблица не содержит столбец:

  select foo from yourTable limit 1

Также вы можете получить инструкцию create-table:

 select sql from sqlite_master where tbl_name = 'YourTableName'

и затем проанализируйте результат, ища имя столбца. Я не знаю элегантного способа запроса списка столбцов для указанной таблицы, хотя он может существовать.

Также, если вы попытаетесь сделать это:

alter table YourTable add column foo {column-def whatever it is}

вы получаете сообщение об ошибке от SQLite, если столбец уже существует. Вы также можете перехватить эту ошибку.

Наконец вы можете сделать это:

  select sql from sqlite_master 
  where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%';    -- or whatever type

и если указанная таблица содержит столбец, который в запросе заключен в двойные кавычки, и с указанным вами типом, вы получите результат, в противном случае - пустой набор. Указание типа данных обеспечивает совпадение подстроки LIKE с именем столбца.

5 голосов
/ 10 декабря 2013

Нет способа (который я знаю) сделать все это в одном запросе SQLite.Вы должны использовать код приложения для управления If / Elseness.

Проверьте, существует ли таблица:

select count(*) from sqlite_master where type = 'table' and name = MyTable';

Проверьте, существует ли столбец в таблице или сейчас

pragma table_info(thumbnail);

Однако лучшим подходом могут быть явные обновления схемы базы данных на основе версий схемы, поддерживаемых вашим приложением (например, конкретный оператор alter table для перехода от версии схемы 1 к 2):

pragma user_version;
0 голосов
/ 29 мая 2015

Кажется, что невозможно выполнить проверку, если столбец не существует, и добавить новый столбец в одну команду, потому что Sqlite не поддерживает «IF NOT EXISTS» для столбца. «ЕСЛИ НЕ СУЩЕСТВУЕТ» работает только на столе. Вот что я сделаю:

rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;");

if(rev != SQLITE_OK){ // add col to table
    ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;");
}
0 голосов
/ 08 января 2011

Вы можете просмотреть столбцы таблицы, используя '.schema tableName'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...