bảng thay đổi sqlite thêm các cột MULTIPLE trong một câu lệnh


159

Có thể thay đổi bảng thêm các cột MULTIPLE trong một câu lệnh trong sqlite không? Những điều sau đây sẽ không hoạt động.

thay đổi bảng kiểm tra thêm văn bản cột mycolumn1, thêm văn bản cột mycolumn2;

Câu trả lời:


311

Không, bạn phải thêm chúng cùng một lúc. Xem sơ đồ cú pháp ở đầu tài liệu ALTER TABLE của SQLite :

Cú pháp thay đổi

Không có vòng lặp trong ADDchi nhánh nên không được phép lặp lại.


12
@JoshPinter: Cảm ơn nhưng tôi nghĩ các sơ đồ cú pháp trong tài liệu SQLite xứng đáng nhận được rất nhiều tín dụng, sơ đồ cú pháp rất tuyệt, mọi người nên sử dụng chúng trong tài liệu của mình.
mu quá ngắn

Câu trả lời này thực sự hữu ích. Cảm ơn bạn.
Julian Alberto

0

Câu trả lời từ @mu quá ngắn 'là đúng. Ngoài ra, việc thêm một cách giải quyết được tối ưu hóa để thêm nhiều cột sử dụng lợi ích của các giao dịch trong 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();

Tôi hy vọng điều này sẽ giúp được ai đó.


0

Điều duy nhất cho đến nay tôi có thể sử dụng là

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

Lưu ý rằng có; về mục đích để làm cho truy vấn được đọc thành nhiều dòng.

Sau đó, tôi chạy truy vấn này và nhận được nhiều cột được thêm vào khi chạy ... Vì vậy, không phải trong một dòng, nhưng có trong một truy vấn có thể.


-16

thay đổi bảng kiểm tra thêm văn bản cột mycolumn1; thay đổi bảng kiểm tra thêm văn bản cột mycolumn2;

sử dụng truy vấn được xác định lại ở trên


6
Đó không phải là một câu lệnh đơn lẻ - bất cứ điều gì với ;tư cách là dấu phân cách phải được thực thi dưới dạng nhiều câu lệnh và điều đó thường có vấn đề. Tuy nhiên, câu trả lời khác đã chứng minh rằng những gì OP yêu cầu là không thể.
o11c
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.