SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Alle temporären Tabellen in SQLite auflisten

Wie bei den meisten Dingen in SQLite gibt es mehrere Möglichkeiten, eine Liste temporärer Tabellen in einer Datenbank zu erhalten.

Hier stelle ich zwei Möglichkeiten vor, temporäre Tabellen in SQLite zurückzugeben.

Der .tables-Befehl

Wenn Sie mit der SQLite-Befehlszeilen-Shell vertraut sind, kennen Sie wahrscheinlich die .tables Punkt-Befehl. Dieser Befehl listet alle Tabellen auf, die einem bestimmten Muster entsprechen (oder einfach alle Tabellen, wenn kein Muster angegeben ist). Dazu gehören temporäre Tabellen.

Beispiel:

CREATE TEMP TABLE TempProducts (id, name, price);
.tables

Ergebnis:

Products           temp.TempProducts  vProducts 

In diesem Fall habe ich eine permanente Tabelle (Products ), eine Ansicht (vProducts ) und eine temporäre Tabelle (temp.TempProducts ).

Sie können also sehen, dass sowohl temporäre als auch permanente Tabellen zurückgegeben werden. Wenn Ihre temporären Tabellen eine feste Namenskonvention verwenden, wie z. B. ein Präfix, das nur für temporäre Tabellen reserviert ist, können Sie den Musterabgleich verwenden, um nur temporäre Tabellen abzurufen.

Beispiel:

.tables temp%

Ergebnis:

temp.TempProducts

Namenskonventionen sind jedoch nur gut, solange sich alle daran halten.

Wenn Sie nicht möchten, dass permanente Tabellen in Ihren Ergebnissen zurückgegeben werden, ist es wahrscheinlich besser, sqlite_temp_master abzufragen Tabelle (unten).

Die sqlite_temp_master-Tabelle

SQLite hat einen sqlite_temp_master Tabelle, die temporäre Tabellen und deren Indizes und Trigger enthält. Diese Tabelle ist nur für die Anwendung sichtbar, die die temporäre Tabelle erstellt hat.

Sie können diese Tabelle wie folgt abfragen:

SELECT name FROM sqlite_temp_master;

Ergebnis:

TempProducts

In diesem Beispiel gebe ich nur den Tabellennamen zurück, kann aber gerne ein Sternchen (* ), um alle Spalten zurückzugeben.

Wie bereits erwähnt, enthält diese Tabelle keine permanenten Tabellen. Wenn Sie sowohl temporäre als auch permanente Tabellen zurückgeben müssen und .temp nicht verwenden können , können Sie den sqlite_master einschließen Tabelle in Ihrer Abfrage.

Beispiel:

SELECT name FROM 
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;

Ergebnis:

Products
TempProducts

Wenn Sie Ansichten einschließen möchten, gehen Sie wie folgt vor:

SELECT name FROM 
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;

Ergebnis:

Products
TempProducts
vProducts