sqlite alter table ajoute plusieurs colonnes dans une seule instruction

159

Est-il possible de modifier la table et d'ajouter PLUSIEURS colonnes dans une seule instruction dans sqlite? Ce qui suit ne fonctionnerait pas.

modifier le test de table ajouter la colonne mycolumn1 text, ajouter la colonne mycolumn2 text;
user775187
la source

Réponses:

311

Non, vous devez les ajouter un par un. Consultez le diagramme de syntaxe en haut de la documentation ALTER TABLE de SQLite :

Syntaxe ALTER TABLE

Il n'y a pas de boucle dans la ADDbranche donc aucune répétition n'est autorisée.

mu est trop court
la source
12
@JoshPinter: Merci mais je pense que les diagrammes de syntaxe dans la documentation SQLite méritent beaucoup de crédit, les diagrammes de syntaxe sont excellents, tout le monde devrait les utiliser dans leurs documents.
mu est trop court
Cette réponse était vraiment utile. Je vous remercie.
Julian Alberto
0

La réponse de @mu est trop courte »est juste. En plus, ajouter une solution de contournement optimisée pour ajouter plusieurs colonnes en utilisant les avantages des transactions en 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();

J'espère que cela aidera quelqu'un.

Arun PM
la source
0

La seule chose que j'utilise à ce jour est

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

Notez qu'il existe; exprès pour que la requête soit lue sur plusieurs lignes.

Ensuite, j'exécute cette requête et j'ajoute plusieurs colonnes en cours d'exécution ... Donc non pas en une seule ligne, mais oui en une seule requête, c'est possible.

Michiel Krol
la source
-16

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

utiliser la requête redéfinie ci-dessus

anand arun
la source
6
Ce n'est pas une seule instruction - tout ce qui a ;un séparateur doit être exécuté comme plusieurs instructions, et cela a souvent de l'importance. L'autre réponse a déjà démontré que ce que le PO demande est impossible, cependant.
o11c