Som med de fleste ting i SQLite, er der mere end én måde at få en liste over midlertidige tabeller i en database på.
Her præsenterer jeg to måder at returnere midlertidige tabeller i SQLite.
.tables-kommandoen
Hvis du er bekendt med SQLite-kommandolinjeskallen, så kender du sikkert til .tables
prik kommando. Denne kommando viser alle tabeller, der matcher et givet mønster (eller blot alle tabeller, hvis der ikke er angivet noget mønster). Dette inkluderer midlertidige tabeller.
Eksempel:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Resultat:
Products temp.TempProducts vProducts
I dette tilfælde har jeg en permanent tabel (Products
), én visning (vProducts
), og en midlertidig tabel (temp.TempProducts
).
Så du kan se, at både midlertidige og permanente borde returneres. Hvis dine midlertidige tabeller bruger en fast navnekonvention, såsom et præfiks, der kun er reserveret til midlertidige tabeller, kan du bruge mønstermatchning til kun at hente midlertidige tabeller.
Eksempel:
.tables temp%
Resultat:
temp.TempProducts
Navnekonventioner er dog kun gode, så længe alle følger dem.
Hvis du ikke vil have permanente tabeller returneret i dine resultater, er du sandsynligvis bedre stillet at forespørge sqlite_temp_master tabel (nedenfor).
sqlite_temp_master-tabellen
SQLite har en sqlite_temp_master tabel, der indeholder midlertidige tabeller og deres indekser og triggere. Denne tabel er kun synlig for det program, der oprettede den midlertidige tabel.
Du kan forespørge i denne tabel på denne måde:
SELECT name FROM sqlite_temp_master;
Resultat:
TempProducts
I dette eksempel returnerer jeg kun tabelnavnet, men du er velkommen til at bruge en stjerne (*
) for at returnere alle kolonner.
Som nævnt inkluderer denne tabel ikke permanente tabeller. Hvis du skal returnere både midlertidige og permanente tabeller, og du ikke kan bruge .temp
, kan du inkludere sqlite_master tabel i din forespørgsel.
Eksempel:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Resultat:
Products TempProducts
Hvis du vil inkludere visninger, skal du gøre dette:
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