Zoals met de meeste dingen in SQLite, is er meer dan één manier om een lijst met tijdelijke tabellen in een database te krijgen.
Hier presenteer ik twee manieren om tijdelijke tabellen in SQLite te retourneren.
Het .tables-commando
Als u bekend bent met de SQLite-opdrachtregelshell, dan kent u waarschijnlijk de .tables
punt commando. Deze opdracht geeft alle tabellen weer die overeenkomen met een bepaald patroon (of gewoon alle tabellen, als er geen patroon is opgegeven). Dit omvat tijdelijke tabellen.
Voorbeeld:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Resultaat:
Products temp.TempProducts vProducts
In dit geval heb ik één vaste tafel (Products
), één weergave (vProducts
), en een tijdelijke tabel (temp.TempProducts
).
U kunt dus zien dat zowel tijdelijke als permanente tabellen worden geretourneerd. Als uw tijdelijke tabellen een vaste naamgevingsconventie gebruiken, zoals een voorvoegsel dat alleen is gereserveerd voor tijdelijke tabellen, kunt u patroonovereenkomst gebruiken om alleen tijdelijke tabellen op te halen.
Voorbeeld:
.tables temp%
Resultaat:
temp.TempProducts
Naamgevingsconventies zijn echter alleen goed zolang iedereen ze volgt.
Als u niet wilt dat permanente tabellen worden geretourneerd in uw resultaten, kunt u waarschijnlijk beter de sqlite_temp_master opvragen tabel (hieronder).
De sqlite_temp_master-tabel
SQLite heeft een sqlite_temp_master tabel die tijdelijke tabellen en hun indices en triggers bevat. Deze tabel is alleen zichtbaar voor de applicatie die de tijdelijke tabel heeft gemaakt.
U kunt deze tabel als volgt doorzoeken:
SELECT name FROM sqlite_temp_master;
Resultaat:
TempProducts
In dit voorbeeld retourneer ik alleen de tabelnaam, maar gebruik gerust een asterisk (*
) om alle kolommen terug te geven.
Zoals vermeld, bevat deze tabel geen vaste tabellen. Als u zowel tijdelijke als permanente tabellen moet retourneren, en u kunt .temp
. niet gebruiken , kunt u de sqlite_master . opnemen tabel in uw zoekopdracht.
Voorbeeld:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Resultaat:
Products TempProducts
Als u weergaven wilt opnemen, doet u dit:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Resultaat:
Products TempProducts vProducts