Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Introdução às tabelas temporárias no SQL Server


No SQL Server, uma tabela temporária é um certo tipo de tabela que existe até sair do escopo (a menos que seja explicitamente descartada).

Isso é diferente de uma tabela regular (persistente), em que a tabela regular existe permanentemente em seu banco de dados até que você a elimine explicitamente.


Vantagens das Tabelas Temporárias


As tabelas temporárias podem ser úteis quando você precisa executar várias consultas em um subconjunto de um conjunto de resultados maior. Você pode usar SELECT... INTO com um WHERE cláusula para colocar o subconjunto de dados em uma tabela temporária. Em seguida, você pode executar consultas nessa tabela temporária. Isso evita que você tenha que filtrar constantemente os dados do conjunto de resultados maior ao fazer várias consultas.

As tabelas temporárias também podem ser úteis do ponto de vista de permissões. Se você precisar trabalhar com dados de uma tabela persistente, mas não tiver permissões suficientes para fazer todas as operações necessárias, poderá copiar esses dados em uma tabela temporária (supondo que você tenha acesso de leitura) e faça o que for necessário .

As tabelas temporárias também podem ser usadas se você não tiver permissão para criar uma tabela (persistente) no banco de dados atual.

Outro aspecto útil das tabelas temporárias é que você pode usá-las para executar consultas ad-hoc rápidas ao executar um teste, demonstrar um conceito etc., sem se preocupar em deixar um rastro de tabelas persistentes que você esqueceu de descartar.

TempDB


As tabelas temporárias são criadas no TempDB base de dados. Este é um banco de dados do sistema que armazena objetos de usuário temporários, como tabelas e índices temporários, procedimentos armazenados temporários, variáveis ​​de tabela, tabelas retornadas em funções com valor de tabela e cursores. Ele também armazena objetos internos criados pelo mecanismo de banco de dados e armazenamentos de versão.

Qualquer usuário pode criar tabelas temporárias em TempDB . Você não precisa configurar nenhuma permissão especial para TempDB Acesso.

Sintaxe


As tabelas temporárias são criadas usando a mesma sintaxe das tabelas regulares. A diferença é que as tabelas temporárias são prefixadas com um ou dois sinais numéricos (# ):
  • As tabelas temporárias locais são prefixadas com um único sinal numérico (por exemplo, #table_name )
  • As tabelas temporárias globais são prefixadas com um sinal de número duplo (por exemplo, ##table_name )

Exemplo de criação de um local tabela temporária:
CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Exemplo de criação de um global tabela temporária:
CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

As tabelas temporárias locais são visíveis apenas na sessão atual e as tabelas temporárias globais são visíveis para todas as sessões.

Quanto tempo dura uma mesa temporária?


As tabelas temporárias são eliminadas automaticamente quando saem do escopo.

Você também pode descartar explicitamente uma tabela temporária usando DROP TABLE .

Exatamente quando uma tabela temporária é descartada automaticamente depende se a tabela temporária é local ou global e se ela foi criada ou não em um procedimento armazenado.
  • Local :uma tabela temporária local criada em um procedimento armazenado é descartada automaticamente quando o procedimento armazenado é concluído. A tabela pode ser referenciada por qualquer procedimento armazenado aninhado executado pelo procedimento armazenado que criou a tabela. A tabela não pode ser referenciada pelo processo que chamou o procedimento armazenado que criou a tabela.
    Todas as outras tabelas temporárias locais são descartadas automaticamente no final da sessão atual.
  • Global :As tabelas temporárias globais são eliminadas automaticamente quando a sessão que criou a tabela termina e todas as outras tarefas param de fazer referência a elas. A associação entre uma tarefa e uma tabela é mantida apenas durante a vida de uma única instrução T-SQL. Isso significa que uma tabela temporária global é descartada na conclusão da última instrução T-SQL que estava fazendo referência ativamente à tabela quando a sessão de criação terminou.

Esquema


Todas as tabelas temporárias são criadas no dbo esquema. Se você especificar explicitamente um esquema diferente, ele será ignorado.

Chaves estrangeiras


As restrições FOREIGN KEY não são aplicadas em tabelas temporárias. Se você especificar uma chave estrangeira, a tabela ainda será criada, apenas sem uma chave estrangeira. Uma mensagem será retornada informando sobre isso.