sql >> Database >  >> RDS >> SQLite

Lijst van alle tijdelijke tabellen in SQLite

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

  1. Aanmeldingsstroom in R12.2 en eenvoudige probleemoplossing

  2. Hoe kom ik erachter of een upsert een update was met PostgreSQL 9.5+ UPSERT?

  3. SQL Server:meerdere rijen combineren in één rij

  4. Wat is de maximale MySQL VARCHAR-grootte?