sqlite alter table adiciona várias colunas em uma única instrução

159

É possível alterar a tabela e adicionar várias colunas em uma única instrução no sqlite? O seguinte não funcionaria.

alterar teste da tabela adicionar texto à coluna mycolumn1, adicionar texto à coluna mycolumn2;
user775187
fonte

Respostas:

311

Não, você deve adicioná-los um de cada vez. Veja o diagrama de sintaxe na parte superior da documentação ALTER TABLE do SQLite :

Sintaxe ALTER TABLE

Não há loop no ADDramo, portanto, nenhuma repetição é permitida.

mu é muito curto
fonte
12
@ JoshPinter: Obrigado, mas acho que os diagramas de sintaxe nos documentos SQLite merecem muito crédito, os diagramas de sintaxe são ótimos, todos devem usá-los em seus documentos.
mu é muito curto
Esta resposta foi realmente útil. Obrigado.
Julian Alberto
0

A resposta de @mu é muito curta 'está certa. Como um extra, adicionar uma solução alternativa otimizada para adicionar várias colunas usando o benefício de transações no 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 isso ajude alguém.

Arun PM
fonte
0

A única coisa possível até agora que eu 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

Note que existem; de propósito para que a consulta seja lida como várias linhas.

Então eu executo essa consulta e recebo várias colunas adicionadas durante a execução ... Então não, não em uma linha, mas sim em uma consulta é possível.

Michiel Krol
fonte
-16

alterar tabela teste adicionar coluna texto da minha coluna1; alterar teste da tabela adicionar texto da coluna mycolumn2;

use a consulta redefinida acima

anand arun
fonte
6
Essa não é uma declaração única - qualquer coisa com ;um separador deve ser executada como várias instruções, e isso geralmente importa. A outra resposta já demonstrou que o que o OP está pedindo é impossível, no entanto.
o11c