sqlite alter table добавляет несколько столбцов в одном выражении


159

Можно ли изменить таблицу добавления столбцов MULTIPLE в одном выражении в sqlite? Следующее не будет работать.

изменить тест таблицы добавить столбец mycolumn1 текст, добавить столбец mycolumn2 текст;

Ответы:


311

Нет, вы должны добавлять их по одному. Смотрите синтаксическую диаграмму в верхней части документации ALTER TABLE SQLite :

Синтаксис ALTER TABLE

Там нет петли в ADDветке, поэтому повторение не допускается.


12
@JoshPinter: Спасибо, но я думаю, что синтаксические диаграммы в документах SQLite заслуживают большого уважения, синтаксические диаграммы великолепны, каждый должен использовать их в своих документах.
Му слишком короткая

Этот ответ был действительно полезным. Спасибо.
Джулиан Альберто

0

Ответ от @mu слишком короткий - правильный. В качестве дополнения, добавление оптимизированного обходного пути для добавления нескольких столбцов, используя преимущества транзакций в SQL.

String alterTableQuery = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN ";
List<String> newColumns = ..// Your new columns

db.beginTransaction();
for (String column : newColumns){
    db.execSQL(alterTableQuery + column +  " VARCHAR");
}
db.setTransactionSuccessful();
db.endTransaction();

Надеюсь, это кому-нибудь поможет.


0

Единственное, что я могу пока использовать, это

BEGIN TRANSACTION;
ALTER TABLE tblName ADD ColumnNameA TEXT DEFAULT '';
ALTER TABLE tblName ADD ColumnNameB TEXT DEFAULT '';
ALTER TABLE tblName ADD ColumnNameC TEXT DEFAULT '';
COMMIT

Обратите внимание, что есть; с целью сделать запрос читаемым в несколько строк.

Затем я запускаю этот запрос и добавляю несколько столбцов при запуске ... Так что нет, не в одной строке, но да, в одном запросе это возможно.


-16

изменить тест таблицы добавить столбец mycolumn1 текст; изменить тест таблицы добавить столбец mycolumn2 текст;

используйте приведенный выше запрос


6
Это не единственный оператор - все, ;что имеет разделитель, должно выполняться как несколько операторов, и это часто имеет значение. Другой ответ уже продемонстрировал, что то, о чем просит ФП, невозможно.
o11c
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.