Podobnie jak w przypadku większości rzeczy w SQLite, istnieje więcej niż jeden sposób na uzyskanie listy tymczasowych tabel w bazie danych.
Tutaj przedstawiam dwa sposoby na zwrócenie tabel tymczasowych w SQLite.
Polecenie .tables
Jeśli znasz powłokę wiersza poleceń SQLite, prawdopodobnie wiesz o .tables
polecenie kropka. To polecenie wyświetla wszystkie tabele pasujące do danego wzorca (lub po prostu wszystkie tabele, jeśli nie podano wzorca). Obejmuje to tabele tymczasowe.
Przykład:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Wynik:
Products temp.TempProducts vProducts
W tym przypadku mam jedną stałą tabelę (Products
), jeden widok (vProducts
) i jedną tabelę tymczasową (temp.TempProducts
).
Możesz więc zobaczyć, że zwracane są zarówno tabele tymczasowe, jak i stałe. Jeśli twoje tabele tymczasowe używają ustalonej konwencji nazewnictwa, na przykład prefiksu zarezerwowanego tylko dla tabel tymczasowych, możesz użyć dopasowania do wzorca, aby pobrać tylko tabele tymczasowe.
Przykład:
.tables temp%
Wynik:
temp.TempProducts
Jednak konwencje nazewnictwa są dobre tylko wtedy, gdy wszyscy ich przestrzegają.
Jeśli nie chcesz, aby w wynikach były zwracane stałe tabele, prawdopodobnie lepiej odpytać sqlite_temp_master tabela (poniżej).
Tabela sqlite_temp_master
SQLite ma sqlite_temp_master tabela zawierająca tabele tymczasowe oraz ich indeksy i wyzwalacze. Ta tabela jest widoczna tylko dla aplikacji, która utworzyła tabelę tymczasową.
Możesz zapytać o tę tabelę w ten sposób:
SELECT name FROM sqlite_temp_master;
Wynik:
TempProducts
W tym przykładzie zwracam tylko nazwę tabeli, ale możesz użyć gwiazdki (*
), aby zwrócić wszystkie kolumny.
Jak wspomniano, ta tabela nie obejmuje stałych stolików. Jeśli potrzebujesz zwrócić zarówno tabele tymczasowe, jak i stałe, i nie możesz użyć .temp
, możesz dołączyć sqlite_master tabeli w zapytaniu.
Przykład:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Wynik:
Products TempProducts
Jeśli chcesz uwzględnić widoki, wykonaj następujące czynności:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Wynik:
Products TempProducts vProducts