Som med de flesta saker i SQLite finns det mer än ett sätt att få en lista över tillfälliga tabeller i en databas.
Här presenterar jag två sätt att returnera temporära tabeller i SQLite.
Kommandot .tables
Om du är bekant med SQLites kommandoradsskal, kommer du förmodligen att känna till .tables
punkt kommando. Detta kommando listar alla tabeller som matchar ett givet mönster (eller helt enkelt alla tabeller, om inget mönster anges). Detta inkluderar tillfälliga tabeller.
Exempel:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Resultat:
Products temp.TempProducts vProducts
I det här fallet har jag en permanent tabell (Products
), en vy (vProducts
), och en tillfällig tabell (temp.TempProducts
).
Så du kan se att både tillfälliga och permanenta bord returneras. Om dina temporära tabeller använder en fast namnkonvention, till exempel ett prefix som endast är reserverat för tillfälliga tabeller, kan du använda mönstermatchning för att bara hämta temporära tabeller.
Exempel:
.tables temp%
Resultat:
temp.TempProducts
Namnkonventioner är dock bara bra så länge alla följer dem.
Om du inte vill att permanenta tabeller ska returneras i dina resultat är det förmodligen bättre att fråga sqlite_temp_master tabell (nedan).
Sqlite_temp_master-tabellen
SQLite har en sqlite_temp_master tabell som innehåller tillfälliga tabeller och deras index och triggers. Den här tabellen är endast synlig för programmet som skapade den tillfälliga tabellen.
Du kan fråga den här tabellen så här:
SELECT name FROM sqlite_temp_master;
Resultat:
TempProducts
I det här exemplet returnerar jag bara tabellnamnet, men använd gärna en asterisk (*
) för att returnera alla kolumner.
Som nämnts inkluderar denna tabell inte permanenta tabeller. Om du behöver returnera både tillfälliga och permanenta tabeller och du inte kan använda .temp
, kan du inkludera sqlite_master tabell i din fråga.
Exempel:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Resultat:
Products TempProducts
Om du vill inkludera vyer gör du så här:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Resultat:
Products TempProducts vProducts