SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Listar todas as tabelas temporárias no SQLite


Como acontece com a maioria das coisas no SQLite, há mais de uma maneira de obter uma lista de tabelas temporárias em um banco de dados.

Aqui apresento duas maneiras de retornar tabelas temporárias no SQLite.

O comando .tables


Se você estiver familiarizado com o shell de linha de comando SQLite, provavelmente conhecerá o .tables comando ponto. Este comando lista todas as tabelas que correspondem a um determinado padrão (ou simplesmente todas as tabelas, se nenhum padrão for fornecido). Isso inclui tabelas temporárias.

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

Resultado:
Products           temp.TempProducts  vProducts 

Neste caso, tenho uma tabela permanente (Products ), uma visualização (vProducts ) e uma tabela temporária (temp.TempProducts ).

Assim, você pode ver que as tabelas temporárias e permanentes são retornadas. Se suas tabelas temporárias usarem uma convenção de nomenclatura fixa, como um prefixo reservado apenas para tabelas temporárias, você poderá usar a correspondência de padrões para recuperar apenas tabelas temporárias.

Exemplo:
.tables temp%

Resultado:
temp.TempProducts

No entanto, as convenções de nomenclatura só são boas desde que todos as sigam.

Se você não deseja que tabelas permanentes sejam retornadas em seus resultados, provavelmente é melhor consultar o sqlite_temp_master tabela (abaixo).

A tabela sqlite_temp_master


SQLite tem um sqlite_temp_master tabela que contém tabelas temporárias e seus índices e gatilhos. Esta tabela é visível apenas para o aplicativo que criou a tabela temporária.

Você pode consultar esta tabela assim:
SELECT name FROM sqlite_temp_master;

Resultado:
TempProducts

Neste exemplo eu só retorno o nome da tabela, mas fique à vontade para usar um asterisco (* ) para retornar todas as colunas.

Como mencionado, esta tabela não inclui tabelas permanentes. Se você precisar retornar tabelas temporárias e permanentes e não puder usar .temp , você pode incluir o sqlite_master tabela em sua consulta.

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

Resultado:
Products
TempProducts

Se você quiser incluir visualizações, faça o seguinte:
SELECT name FROM 
   (SELECT * FROM sqlite_master UNION ALL
    SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;

Resultado:
Products
TempProducts
vProducts