2011-01-08 26 views
5

Come posso aggiungere una colonna in una tabella SQLite se e solo se la stessa colonna non esiste nella tabella?In sqlite Come aggiungere una colonna nella tabella se la stessa colonna non esiste nella tabella

Utilizzo di ALTER TABLE Sono in grado di creare una nuova colonna ma voglio sapere come verificare se tale colonna esiste già nella tabella o no?

+1

È possibile visualizzare le colonne della tabella utilizzando '.schema tableName' – krakover

+1

@krakover Non è che una risposta? –

+0

@goreSplatter A seconda di cosa sta cercando di ottenere. Ho spiegato come evitare il problema, non come risolverlo .. \ – krakover

risposta

0

È possibile visualizzare le colonne della tabella utilizzando '.schema tableName'

+2

Puoi dare un esempio sql? – boiledwater

6

SQLite restituisce un errore del tipo 'non esiste colonna: foo' se la tabella non contiene la colonna:

select foo from yourTable limit 1 

inoltre è possibile ottenere la dichiarazione create-table:

select sql from sqlite_master where tbl_name = 'YourTableName' 

e quindi analizzare il risultato, cercando il nome-colonna. Non conosco un modo elegante per interrogare l'elenco di colonne per una tabella specificata, sebbene possa esistere.

anche se si tenta di fare questo:

alter table YourTable add column foo {column-def whatever it is} 

si ottiene un errore da SQLite se la colonna esiste già. Potresti intrappolare anche questo errore.

Infine si potrebbe fare questo:

select sql from sqlite_master 
    where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%'; -- or whatever type 

e se la tabella specificata contiene la colonna che è circondato da virgolette nella query, e con il tipo che hai specificato, si otterrà un risultato, altrimenti un set vuoto. La specifica del tipo di dati garantisce che la corrispondenza della sottostringa LIKE si verifichi sul nome di una colonna.

4

Non c'è modo (che io sappia) di fare tutto in un'unica query SQLite. È necessario utilizzare il codice dell'applicazione per gestire l'If/Elseness.

Verificare se la tabella esiste o no:

select count(*) from sqlite_master where type = 'table' and name = MyTable'; 

Verificare se la colonna esiste nella tabella o la società

pragma table_info(thumbnail); 

Tuttavia, un approccio migliore potrebbe essere aggiornamenti espliciti schema di database basati su versioni dello schema dell'applicazione mantiene (es. specifica alter table della tabella per passare dalla versione 1 alla 2 dello schema):

pragma user_version; 
0

Sembra impossibile controllare se la colonna non esiste e aggiungere la nuova colonna in un comando, perché Sqlite non supporta "SE NON ESISTE" per la colonna. "SE NON ESISTE" funziona solo sul tavolo. Ecco quello che farò:

rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;"); 

if(rev != SQLITE_OK){ // add col to table 
    ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;"); 
} 
Problemi correlati