sqlite alter tableは単一のステートメントに複数の列を追加します


159

SQLiteの単一ステートメントでテーブル追加の複数列を変更することは可能ですか?以下は機能しません。

変更テーブルテスト列mycolumn1テキストを追加し、列mycolumn2テキストを追加します。

回答:


311

いいえ、一度に1つずつ追加する必要があります。SQLiteのALTER TABLEドキュメントの上部にある構文図を参照してください。

ALTER TABLE構文

ADDブランチにはループがないため、繰り返しは許可されません。


12
@JoshPinter:ありがとうございます。ただし、SQLiteドキュメントの構文図は多くの功績があると思います。構文図はすばらしいので、誰もがドキュメントでそれらを使用する必要があります。
muが短すぎる

この回答は本当に役に立ちました。ありがとうございました。
ジュリアンアルベルト

0

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

これが誰かの役に立つことを願っています。


0

これまで私が使用できる唯一のことは

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

あることに注意してください。クエリを複数行として読み取るため。

次に、このクエリを実行して、実行時に複数の列を追加します...したがって、1行ではなく、1つのクエリでは可能です。


-16

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

上記の再定義されたクエリを使用する


6
それは単一のステートメントではありません- ;セパレーターを含むものはすべて複数のステートメントとして実行する必要があり、それはしばしば問題になります。ただし、もう1つの回答は、OPが求めていることは不可能であることをすでに示しています。
o11c 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.