Categorias

Como utilizar e criar tabelas temporárias no SQL Server

Sabe aquela situação onde você precisa por exemplo, copiar os dados de uma determinada tabela para uma "tabela temporária", faz os ajustes necessários, retorna os dados da tabela temporária para a tabela principal e aí elimina a tabela?

Pois bem, saiba que o SQL Server permite que você crie uma tabela temporária, ou seja, a tabela existirá somente enquanto a conexão estiver ativa com o banco de dados. Ao encerrar a conexão a tabela automaticamente é eliminada!

Além disso a tabela temporária não fica no database de produção. Ela sempre é criada no database tempdb e poderá ser visualizada apenas pelo usuário que efetuou a conexão.

Vejamos um exemplo:

Considere a seguinte tabela:

CREATE TABLE LOC_LOCACAO (
LOC_IN_CODIGO INT NOT NULL CONSTRAINT LOC_PK_LOCACAO PRIMARY KEY,
LOC_DT_LOCACAO SMALLDATETIME,
LOC_RE_VALOR NUMERIC(12,2)
);

Inserindo alguns registros:

SET DATEFORMAT YMD
Define a data no formato YMD, evitando erro no SQL em Português
insert into LOC_LOCACAO values (1,’2009-07-06′,3.50);
insert into LOC_LOCACAO values (2,’2009-07-06′,4.50);
insert into LOC_LOCACAO values (3,’2009-07-07′,4.50);

Digamos que você precisa copiar os dados para uma tabela temporária que iremos chamar de LOC_LOCACAOTEMP

Temos duas opções:

1. Criar a tabela temporária durante o próprio comando SELECT/INSERT:
SELECT
LOC_IN_CODIGO, LOC_DT_LOCACAO, LOC_RE_VALOR
INTO #LOC_LOCACAOTEMP
FROM LOC_LOCACAO

Observe que o nome da tabela temporária é iniciado pelo caractere #.

2. A outra opção seria criar a tabela na "unha":
CREATE TABLE #LOC_LOCACAOTEMP (
LOC_IN_CODIGO INT NOT NULL,
LOC_DT_LOCACAO SMALLDATETIME,
LOC_RE_VALOR NUMERIC(12,2)
);

E depois rodar o seu comando de insert, por exemplo:

INSERT INTO #LOC_LOCACAOTEMP VALUES (7,’2008-06-30′,3.50);

Para visualizar os registros da tabela temporária:

SELECT * FROM #LOC_LOCACAOTEMP

ATENÇÃO! Observe que essa tabela existe apenas para o usuário da atual conexão.

Tente abrir o SQL Server Management Studio Express em uma outra janela ou outra máquina e rodar o seguinte comando:

SELECT * FROM #LOC_LOCACAOTEMP

Irá dar uma mensagem de erro avisando que a tabela não existe!

"Poxa! Mas eu queria criar uma tabela temporária que pudesse ser compartilhada em outra estação… Tem como?"

Sim! É possível criar uma tabela temporária compartilhável, ou como ela é chamada no SQL de TEMP GLOBAL TABLE.

Vejamos como criar a tabela temporária global utilizando o mesmo exemplo já visto:

CREATE TABLE ##LOC_LOCACAOTEMP
( LOC_IN_CODIGO INT NOT NULL,
LOC_DT_LOCACAO SMALLDATETIME,
LOC_RE_VALOR NUMERIC(12,2)
);

Notou algo diferente? Não?
A única diferença é que a tabela irá iniciar por dois caracteres #.

Não esqueça: Assim que a conexão que a criou se desconectar a tabela será destruída!