ChatGPT解决这个技术问题 Extra ChatGPT

sqlite alter table 在单个语句中添加 MULTIPLE 列

是否可以在 sqlite 的单个语句中更改表添加 MULTIPLE 列?以下是行不通的。

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

C
Community

不,您必须一次添加一个。请参阅 SQLite's ALTER TABLE documentation 顶部的语法图:

https://www.sqlite.org/images/syntax/alter-table-stmt.gif

ADD 分支中没有循环,因此不允许重复。


@JoshPinter:谢谢,但我认为 SQLite 文档中的语法图值得称赞,语法图很棒,每个人都应该在他们的文档中使用它们。
M
Michiel Krol

到目前为止,我唯一可能使用的是

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

注意有 ;故意使查询被读取为多行。

然后我运行这个查询并在运行时添加多个列......所以不是不是在一行中,而是在一个查询中是可能的。


请注意,migrate 方法已在事务中调用,因此此方法的好处有限。
A
Arun P M

@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();

我希望这会对某人有所帮助。


a
anand arun

更改表测试添加列 mycolumn1 文本;更改表测试添加列 mycolumn2 文本;

使用上面重新定义的查询


这不是一个单一的语句 - 任何以 ; 作为分隔符的东西都必须作为多个语句执行,而且它通常很重要。然而,另一个答案已经证明 OP 所要求的是不可能的。