sqlite alter table agrega columnas MÚLTIPLES en una sola declaración

159

¿Es posible modificar la tabla agregar columnas MÚLTIPLES en una sola declaración en sqlite? Lo siguiente no funcionaría.

alterar prueba de tabla agregar columna mycolumn1 texto, agregar columna mycolumn2 texto;
usuario775187
fuente

Respuestas:

311

No, tienes que agregarlos uno a la vez. Vea el diagrama de sintaxis en la parte superior de la documentación ALTER TABLE de SQLite :

ALTA TABLA Sintaxis

No hay bucle en la ADDrama, por lo que no se permite la repetición.

mu es demasiado corto
fuente
12
@JoshPinter: Gracias pero creo que los diagramas de sintaxis en los documentos de SQLite merecen mucho crédito, los diagramas de sintaxis son geniales, todos deberían usarlos en sus documentos.
mu es demasiado corto
Esta respuesta fue realmente útil. Gracias.
Julian Alberto
0

La respuesta de @mu es demasiado corta 'es correcta. Como extra, agregar una solución alternativa optimizada para agregar múltiples columnas utilizando el beneficio de las transacciones 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();

Espero que esto ayude a alguien.

Arun PM
fuente
0

Lo único que puedo usar hasta ahora es

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

Tenga en cuenta que hay; con el propósito de hacer que la consulta se lea como varias líneas.

Luego ejecuto esta consulta y agrego varias columnas al ejecutar ... Entonces no, no en una línea, pero sí en una consulta es posible.

Michiel Krol
fuente
-16

alter table test agregar columna mycolumn1 text; alterar prueba de tabla agregar columna mycolumn2 text;

use la consulta redifinada anterior

anand arun
fuente
66
Esa no es una sola declaración: cualquier cosa con ;un separador debe ejecutarse como varias declaraciones, y a menudo es importante. Sin embargo, la otra respuesta ya demostró que lo que pide el OP es imposible.
o11c