sqlite alter table aggiunge MULTIPLE colonne in una singola istruzione


159

È possibile modificare la tabella aggiungere colonne MULTIPLE in una singola istruzione in sqlite? Quanto segue non funzionerebbe.

modifica tabella test aggiungi colonna mycolumn1 testo, aggiungi colonna mycolumn2 testo;

Risposte:


311

No, devi aggiungerli uno alla volta. Vedi il diagramma di sintassi nella parte superiore della documentazione ALTER TABLE di SQLite :

Sintassi ALTER TABLE

Non c'è loop nel ADDramo quindi non è consentita alcuna ripetizione.


12
@JoshPinter: Grazie, ma penso che i diagrammi di sintassi nei documenti SQLite meritino molto del merito, i diagrammi di sintassi sono fantastici, tutti dovrebbero usarli nei loro documenti.
mu è troppo corto

Questa risposta è stata davvero utile. Grazie.
Julian Alberto,

0

La risposta di @mu è troppo breve 'è giusta. Come extra, l'aggiunta di una soluzione alternativa ottimizzata per l'aggiunta di più colonne utilizzando il vantaggio delle transazioni in 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();

Spero che questo possa aiutare qualcuno.


0

L'unica cosa finora possibile che uso è

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

Si noti che ci sono; apposta per far leggere la query come più righe.

Quindi eseguo questa query e ottengo più colonne aggiunte in esecuzione ... Quindi no non in una riga, ma sì in una query è possibile.


-16

modifica tabella test aggiungi colonna mycolumn1 testo; modifica tabella test aggiungi colonna mycolumn2 testo;

utilizzare la query ridimensionata sopra


6
Questa non è una singola istruzione: qualsiasi cosa con ;come separatore deve essere eseguita come più istruzioni e spesso importa. L'altra risposta ha già dimostrato che ciò che l'OP chiede è impossibile, tuttavia.
o11c,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.