2009-04-18 21 views
7

vorrei fare una query come prossimo:INFORMATION_SCHEMA.COLUMNS su SQLite

SELECT table_name, column_name, data_type, is_nullable, ... 
FROM information_schema.columns 

su un database SQLite.

ho controllato

PRAGMA table_info(table_name); 

ma non soddisfa le mie esigenze, basta controllare i campi per uno tavolo.

ho controllato

select * from sqlite_master where type = 'table'; 

Ma questo solo ottiene nomi di tabelle e query di creazione.

C'è un modo per "unirsi" a questi metodi? o altri suggerimenti o idee? tx

+0

Puoi spiegare perché PRAGMA non soddisfa le tue esigenze? Per me dà per ogni campo una riga con columnname, datatype ecc. Di che altro hai bisogno? –

+0

Quello di cui avevo bisogno era una query come SELECT * FROM information_schema.columns senza un dove. PRAGMA funziona per un solo tavolo ogni volta che viene visualizzato il link interrotto –

risposta

4

So che non vuoi sentire questo, ma non sarai in grado di fare il join da SQL con SQLite. Il pragma table_info non è mappato su una query standard, ma piuttosto su un programma macchina virtuale codificato in modo fisso nelle origini SQLite. Quel programma supporta solo una singola tabella. Punto. :)

Se le tue esigenze sono solo test, non dovrebbe essere troppo difficile scrivere script per fare ciò che vuoi. Altrimenti, dovrai scrivere questo nella tua applicazione. In entrambi i casi, dovrai selezionare il nome della tabella da sqlite_master utilizzando la tua query sqlite_master, creare una query SQL utilizzando sqlite3_mprintf("pragma table_info(%s);",name) e prepararla/eseguirla.

3

C'è molto più supporto nell'API SQLite C per questo genere di cose; vedi this page per esempio.

+0

e sto cercando un modo nativo –

3

FYI, se stai usando .Net puoi usare il metodo DbConnection.GetSchema per recuperare le informazioni che di solito sono in INFORMATION_SCHEMA. Se si dispone di un livello di astrazione è possibile avere lo stesso codice per tutti i tipi di database (NOTA che MySQL sembra gestire i primi 2 argomenti dell'array delle restrizioni).