Eliminare una colonna

Un caro saluto a tutta la lista, dopo essere riuscito, grazie ad Antonio, ad aggiungere una tabella nel database SQLite ora ho necessit di eliminare un paio di colonne in una vecchia tabella, pensavo di saperlo fare ma non ci sono riuscito. Ho utilizzato il seguente codice (“ALTER TABLE Miatabella DROP colonna”) anche se non da errori non cancella un bel niente, dove sbaglio o tutto sbagliato?
Mario

sqlite non ti permette di eliminare una colonna (come hai visto ignora il comando)
Devi rinominare la tabella (che puoi fare) creare nuovamente quella originale con tutte le colonne che ti servono e poi copiare i dati da quella rinominata a quella creata (utilizzando solo le colonne necessarie ovviamente)

Fortunatamente sono tutte operazioni estremamente veloci.

sono tutte operazioni estremamente veloci. per chi lo sa fare!! io ho provato ma perdo tutta la tabella
(“ALTER TABLE miatabella RENAME TO miatabella_old”)
(“CREATE TABLE miatabella (tutte le colonne con il tipo (date, varchar, boolean,ecc) meno le due che voglio eliminare)”)
(“INSERT INTO miatabella(tutte le colonne(solo nome) select le colonne che voglio importare (solo nome) From miatabella_old”)
(“DROP TABLE miatabella_old”)
Ma se lasciassi le due colonne dormienti (sono booleane quindi non dovrebbero occupare molto spazio) cosa succede? all’apparenza sembra che vada tutto bene

Mettiamo che tu abbia una tabella esempio, con i campi campo1 e campo2 che vuoi mantenere e un campo rimuovi da eliminare.

la cosa consigliabile mettere tutto in una transazione in modo da poter gestire gli errori senza distruggere i dati.
Se gestisci chiavi esterne devi prima disabilitare le foreign_keys e alla fine del processo riabilitarle.

create la transazione devi usare:
//Rinomini la tabella
ALTER TABLE esempio RENAME TO esempio_old

//Crei la tabella da zero (questo vuol dire con tutti gli indici e tutti gli eventuali vincoli, qui ad esempio campo1 deve essere unico)
CREATE TABLE esempio (campo1 TEXT UNIQUE, campo2 TEXT)

//Inserisci i dati richiesti dalla vecchia tabella
INSERT INTO esempio (campo1, campo2) SELECT campo1, campo2 FROM esempio_old

//Ora elimini a vecchi tabella
DROP TABLE esempio_old

A questo punto se tutto andato ok puoi fare il commit, altrimenti il rollback

in ogni caso, come hai detto se sono pochi dati puoi anche lasciarli li