sql >> Databasteknik >  >> RDS >> SQLite

Lista alla temporära tabeller i SQLite

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

  1. Hur man migrerar fristående Moodle till en klustrad databas skalbar installation

  2. Hur Cosd() fungerar i PostgreSQL

  3. Hur man använder INNER JOIN i SQL

  4. Den repeterbara läsisoleringsnivån