Stejně jako u většiny věcí v SQLite existuje více než jeden způsob, jak získat seznam dočasných tabulek v databázi.
Zde uvádím dva způsoby, jak vrátit dočasné tabulky v SQLite.
Příkaz .tables
Pokud znáte prostředí příkazového řádku SQLite, pravděpodobně budete vědět o .tables
příkaz tečka. Tento příkaz vypíše všechny tabulky odpovídající danému vzoru (nebo jednoduše všechny tabulky, pokud není zadán žádný vzor). To zahrnuje dočasné tabulky.
Příklad:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Výsledek:
Products temp.TempProducts vProducts
V tomto případě mám jednu stálou tabulku (Products
), jedno zobrazení (vProducts
) a jednu dočasnou tabulku (temp.TempProducts
).
Můžete tedy vidět, že jsou vráceny dočasné i trvalé tabulky. Pokud vaše dočasné tabulky používají pevnou konvenci pojmenování, jako je předpona vyhrazená pouze pro dočasné tabulky, můžete použít porovnávání vzorů k načtení pouze dočasných tabulek.
Příklad:
.tables temp%
Výsledek:
temp.TempProducts
Konvence pojmenování jsou však dobré jen tehdy, pokud je všichni dodržují.
Pokud nechcete, aby se ve výsledcích vracely trvalé tabulky, pravděpodobně bude lepší zadat dotaz na sqlite_temp_master tabulka (níže).
Tabulka sqlite_temp_master
SQLite má sqlite_temp_master tabulka, která obsahuje dočasné tabulky a jejich indexy a spouštěče. Tato tabulka je viditelná pouze pro aplikaci, která dočasnou tabulku vytvořila.
Tuto tabulku můžete dotazovat takto:
SELECT name FROM sqlite_temp_master;
Výsledek:
TempProducts
V tomto příkladu vracím pouze název tabulky, ale klidně použijte hvězdičku (*
) vrátíte všechny sloupce.
Jak již bylo zmíněno, tato tabulka nezahrnuje stálé tabulky. Pokud potřebujete vrátit dočasné i trvalé tabulky a nemůžete použít .temp
, můžete zahrnout sqlite_master tabulka ve vašem dotazu.
Příklad:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Výsledek:
Products TempProducts
Pokud chcete zahrnout pohledy, postupujte takto:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Výsledek:
Products TempProducts vProducts