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;

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.


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.


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.


-16

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

utiliser la requête redéfinie ci-dessus


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.