Como ocurre con la mayoría de las cosas en SQLite, hay más de una forma de obtener una lista de tablas temporales en una base de datos.
Aquí presento dos formas de devolver tablas temporales en SQLite.
El comando .tables
Si está familiarizado con el shell de línea de comandos de SQLite, entonces probablemente sabrá acerca de .tables
comando de punto Este comando enumera todas las tablas que coinciden con un patrón dado (o simplemente todas las tablas, si no se proporciona ningún patrón). Esto incluye tablas temporales.
Ejemplo:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Resultado:
Products temp.TempProducts vProducts
En este caso, tengo una tabla permanente (Products
), una vista (vProducts
), y una tabla temporal (temp.TempProducts
).
Entonces puede ver que se devuelven tablas temporales y permanentes. Si sus tablas temporales usan una convención de nomenclatura fija, como un prefijo reservado solo para tablas temporales, puede usar la coincidencia de patrones para recuperar solo tablas temporales.
Ejemplo:
.tables temp%
Resultado:
temp.TempProducts
Sin embargo, las convenciones de nomenclatura solo son buenas siempre que todos las sigan.
Si no desea que se devuelvan tablas permanentes en sus resultados, probablemente sea mejor que consulte el sqlite_temp_master tabla (abajo).
La tabla sqlite_temp_master
SQLite tiene un sqlite_temp_master tabla que contiene tablas temporales y sus índices y disparadores. Esta tabla solo es visible para la aplicación que creó la tabla temporal.
Puede consultar esta tabla de esta manera:
SELECT name FROM sqlite_temp_master;
Resultado:
TempProducts
En este ejemplo, solo devuelvo el nombre de la tabla, pero siéntete libre de usar un asterisco (*
) para devolver todas las columnas.
Como se mencionó, esta tabla no incluye tablas permanentes. Si necesita devolver tablas temporales y permanentes y no puede usar .temp
, puede incluir el sqlite_master tabla en su consulta.
Ejemplo:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Resultado:
Products TempProducts
Si desea incluir vistas, haga esto:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Resultado:
Products TempProducts vProducts