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!