201 votes

sqlite alter table ajoute des colonnes MULTIPLES dans une seule déclaration

Est-il possible de modifier une table en ajoutant de MULTIPLES colonnes dans une seule instruction en sqlite ? Ce qui suit ne fonctionnerait pas.

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

374voto

mu is too short Points 205090

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

ALTER TABLE syntax

Il n'y a pas de boucle dans le ADD de sorte qu'aucune répétition n'est autorisée.

17 votes

@JoshPinter : Merci mais je pense que les diagrammes syntaxiques dans les docs SQLite méritent une grande partie du crédit, les diagrammes syntaxiques sont géniaux, tout le monde devrait les utiliser dans leurs docs.

23voto

Michiel Krol Points 75

La seule chose possible pour l'instant que j'utilise 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 y a des ; à dessein pour que la requête soit lue sur plusieurs lignes.

Ensuite, j'exécute cette requête et j'obtiens plusieurs colonnes ajoutées à l'exécution... Donc non, pas dans une ligne, mais oui, dans une requête, c'est possible.

3voto

Arun P M Points 196

La réponse de @mu est "trop court" est juste. En complément, ajout d'une solution de contournement optimisée pour l'ajout de plusieurs colonnes en utilisant l'avantage 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.

-19voto

anand arun Points 4

Modifier le tableau test en ajoutant la colonne mycolumn1 texte ; modifier le tableau test en ajoutant la colonne mycolumn2 texte ;

utiliser la requête redéfinie ci-dessus

6 votes

Ce n'est pas une simple déclaration - n'importe quoi avec ; en tant que séparateur doit être exécutée en tant que déclarations multiples, 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X