sqlite alter table menambahkan kolom GANDA dalam satu pernyataan

159

Apakah mungkin untuk mengubah tabel menambahkan kolom GANDA dalam satu pernyataan dalam sqlite? Berikut ini tidak akan berfungsi.

ubah tabel uji tambah kolom teks mycolumn1, tambahkan kolom teks mycolumn2;
pengguna775187
sumber

Jawaban:

311

Tidak, Anda harus menambahkannya satu per satu. Lihat diagram sintaks di bagian atas dokumentasi ALTER TABLE SQLite :

Sintaks ALTER TABLE

Tidak ada loop di ADDcabang sehingga tidak ada pengulangan yang diizinkan.

mu terlalu pendek
sumber
12
@ JoshPinter: Terima kasih tapi saya pikir diagram sintaks dalam dokumen SQLite layak mendapatkan banyak penghargaan, diagram sintaksnya bagus, semua orang harus menggunakannya dalam dokumen mereka.
mu terlalu pendek
Jawaban ini sangat membantu. Terima kasih.
Julian Alberto
0

Jawaban dari @mu terlalu pendek 'benar. Sebagai tambahan, menambahkan solusi yang dioptimalkan untuk menambahkan beberapa kolom menggunakan manfaat transaksi dalam 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();

Saya harap ini akan membantu seseorang.

Arun PM
sumber
0

Satu-satunya hal sejauh ini yang mungkin saya gunakan adalah

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

Perhatikan bahwa ada; dengan tujuan membuat kueri dibaca sebagai beberapa baris.

Lalu saya menjalankan kueri ini dan menambahkan beberapa kolom saat dijalankan ... Jadi, tidak dalam satu baris, tapi ya dalam satu kueri, itu mungkin.

Michiel Krol
sumber
-16

ubah tabel test add kolom mycolumn1 teks; ubah tabel test add kolom mycolumn2 teks;

gunakan kueri redefined di atas

anand arun
sumber
6
Itu bukan pernyataan tunggal - apa pun dengan ;sebagai pemisah harus dieksekusi sebagai banyak pernyataan, dan itu sering kali penting. Jawaban lain sudah menunjukkan bahwa apa yang diminta OP itu tidak mungkin.
o11c