sqlite alter table dodaje MULTIPLE kolumn w jednej instrukcji

159

Czy można zmienić tabelę, dodając MULTIPLE kolumn w jednej instrukcji w sqlite? Poniższe nie zadziałały.

zmień test tabeli dodaj tekst kolumna moja kolumna1, dodaj tekst kolumna moja kolumna2;
user775187
źródło

Odpowiedzi:

311

Nie, musisz dodawać je pojedynczo. Zobacz diagram składni u góry dokumentacji ALTER TABLE SQLite :

Składnia ALTER TABLE

W ADDgałęzi nie ma pętli, więc powtórzenia nie są dozwolone.

mu jest za krótkie
źródło
12
@JoshPinter: Dzięki, ale myślę, że diagramy składniowe w dokumentacji SQLite zasługują na duże uznanie, diagramy składniowe są świetne, każdy powinien ich używać w swoich dokumentach.
mu jest za krótkie
Ta odpowiedź była naprawdę pomocna. Dziękuję Ci.
Julian Alberto
0

Odpowiedź z @mu jest za krótka ”jest poprawna. Dodatkowo dodanie zoptymalizowanego obejścia polegającego na dodawaniu wielu kolumn przy użyciu transakcji w języku 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();

Mam nadzieję, że to komuś pomoże.

Arun PM
źródło
0

Jedyne, co do tej pory możliwe, to

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

Zauważ, że są; celowo, aby zapytanie było czytane jako wiele wierszy.

Następnie uruchamiam to zapytanie i otrzymuję wiele kolumn dodanych w trakcie ... Więc nie, nie w jednym wierszu, ale tak, w jednym zapytaniu jest to możliwe.

Michiel Krol
źródło
-16

alter table test add column mycolumn1 text; alter table test add column mycolumn2 text;

użyj powyższego zredefiniowanego zapytania

anand arun
źródło
6
To nie jest pojedyncza instrukcja - wszystko, ;co jest separatorem, musi być wykonywane jako wiele instrukcji i często ma to znaczenie. Druga odpowiedź już pokazała, że ​​to, o co prosi PO, jest jednak niemożliwe.
o11c