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;

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.


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.


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.


-16

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

użyj powyższego zredefiniowanego zapytania


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.