2009-04-18 12 views
7

me gustaría hacer una consulta como a continuación:INFORMATION_SCHEMA.COLUMNS en sqlite

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

en una base de datos SQLite.

yo nos registramos

PRAGMA table_info(table_name); 

pero no se adapta a mis necesidades, sólo echa campos para una mesa.

yo nos registramos

select * from sqlite_master where type = 'table'; 

Pero esto sólo se pone nombres de tabla y consulta de creación.

¿Hay alguna manera de "unir" estos métodos? o cualquier otra sugerencia o idea? tx

+0

¿Puede explicar por qué PRAGMA no se ajusta a sus necesidades? Para mí da para cada campo una fila con columnname, datatype, etc. ¿Qué más necesitas? –

+0

Lo que necesitaba era una consulta como SELECT * FROM information_schema.columns sin un dónde. PRAGMA funciona solo para una mesa, una vez –

Respuesta

4

Sé que no quiere escuchar esto, pero no podrá hacer la unión desde SQL con SQLite. El pragma table_info no está asignado a una consulta estándar, sino más bien a un programa de máquina virtual codificado en las fuentes de SQLite. Ese programa solo es compatible con una sola tabla. Punto final. :)

Si sus necesidades son solo pruebas, no debería ser demasiado difícil escribir secuencias de comandos para hacer lo que desee. De lo contrario, tendrá que escribir esto en su aplicación. De cualquier manera, se seleccionará el nombre de la tabla de sqlite_master utilizando su consulta sqlite_master, se realizará una consulta SQL a partir del sqlite3_mprintf("pragma table_info(%s);",name) y se preparará/ejecutará.

3

Hay mucho más soporte en la API C de SQLite para este tipo de cosas; ver this page por ejemplo.

+0

enlace roto, y estoy buscando una forma nativa –

3

FYI, si está utilizando .Net puede usar el método DbConnection.GetSchema para recuperar información que normalmente está en INFORMATION_SCHEMA. Si tiene una capa de abstracción, puede tener el mismo código para todos los tipos de bases de datos (tenga en cuenta que MySQL parece esquivar los primeros argumentos de la matriz de restricciones).