Както при повечето неща в SQLite, има повече от един начин да получите списък с временни таблици в база данни.
Тук представям два начина за връщане на временни таблици в SQLite.
Командата .tables
Ако сте запознати с обвивката на командния ред на SQLite, тогава вероятно ще знаете за .tables
команда точка. Тази команда изброява всички таблици, съответстващи на даден модел (или просто всички таблици, ако не е даден шаблон). Това включва временни таблици.
Пример:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Резултат:
Products temp.TempProducts vProducts
В този случай имам една постоянна таблица (Products
), един изглед (vProducts
) и една временна таблица (temp.TempProducts
).
Така че можете да видите, че както временните, така и постоянните таблици се връщат. Ако вашите временни таблици използват фиксирана конвенция за именуване, като например префикс, запазен само за временни таблици, можете да използвате съвпадение на шаблон, за да извлечете само временни таблици.
Пример:
.tables temp%
Резултат:
temp.TempProducts
Въпреки това, конвенциите за именуване са добри само докато всички ги спазват.
Ако не искате постоянни таблици да се връщат във вашите резултати, вероятно е по-добре да заявите sqlite_temp_master таблица (по-долу).
Таблицата sqlite_temp_master
SQLite има sqlite_temp_master таблица, която съдържа временни таблици и техните индекси и тригери. Тази таблица се вижда само от приложението, което е създало временната таблица.
Можете да направите заявка към тази таблица по следния начин:
SELECT name FROM sqlite_temp_master;
Резултат:
TempProducts
В този пример връщам само името на таблицата, но не се колебайте да използвате звездичка (*
), за да върнете всички колони.
Както споменахме, тази таблица не включва постоянни таблици. Ако трябва да върнете както временни, така и постоянни таблици и не можете да използвате .temp
, можете да включите sqlite_master таблица във вашата заявка.
Пример:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Резултат:
Products TempProducts
Ако искате да включите изгледи, направете това:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Резултат:
Products TempProducts vProducts