SQLite
 sql >> Database >  >> RDS >> SQLite

Elenca tutte le tabelle temporanee in SQLite

Come per la maggior parte delle cose in SQLite, c'è più di un modo per ottenere un elenco di tabelle temporanee in un database.

Qui presento due modi per restituire tabelle temporanee in SQLite.

Il comando .tables

Se hai familiarità con la shell della riga di comando di SQLite, probabilmente conoscerai il .tables comando punto. Questo comando elenca tutte le tabelle che corrispondono a un determinato modello (o semplicemente tutte le tabelle, se non viene fornito alcun modello). Ciò include le tabelle temporanee.

Esempio:

CREATE TEMP TABLE TempProducts (id, name, price);
.tables

Risultato:

Products           temp.TempProducts  vProducts 

In questo caso, ho una tabella permanente (Products ), una vista (vProducts ) e una tabella temporanea (temp.TempProducts ).

Quindi puoi vedere che vengono restituite sia le tabelle temporanee che quelle permanenti. Se le tabelle temporanee utilizzano una convenzione di denominazione fissa, ad esempio un prefisso riservato solo alle tabelle temporanee, puoi utilizzare la corrispondenza dei modelli per recuperare solo le tabelle temporanee.

Esempio:

.tables temp%

Risultato:

temp.TempProducts

Tuttavia, le convenzioni di denominazione sono valide solo se tutti le seguono.

Se non vuoi che le tabelle permanenti vengano restituite nei tuoi risultati, probabilmente faresti meglio a interrogare sqlite_temp_master tabella (sotto).

La tabella sqlite_temp_master

SQLite ha un sqlite_temp_master tabella che contiene tabelle temporanee e relativi indici e trigger. Questa tabella è visibile solo all'applicazione che ha creato la tabella temporanea.

Puoi interrogare questa tabella in questo modo:

SELECT name FROM sqlite_temp_master;

Risultato:

TempProducts

In questo esempio restituisco solo il nome della tabella, ma sentiti libero di usare un asterisco (* ) per restituire tutte le colonne.

Come accennato, questa tabella non include tabelle permanenti. Se devi restituire tabelle temporanee e permanenti e non puoi utilizzare .temp , puoi includere sqlite_master tabella nella tua query.

Esempio:

SELECT name FROM 
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;

Risultato:

Products
TempProducts

Se vuoi includere le visualizzazioni, procedi come segue:

SELECT name FROM 
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;

Risultato:

Products
TempProducts
vProducts