No SQL Server, as tabelas temporárias são criadas usando o mesmo
CREATE TABLE
sintaxe como tabelas regulares. A diferença é que os nomes das tabelas temporárias são prefixados com um ou dois sinais numéricos (#
), dependendo se é uma tabela temporária local ou uma tabela temporária global:- Tabelas temporárias locais são prefixados com um único sinal numérico (
#
) - Tabelas temporárias globais são prefixados com um sinal de número duplo (
##
)
Exemplo 1 – Criar uma tabela temporária local
Aqui está um exemplo de criação de uma tabela temporária local:
CREATE TABLE #Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
O nome que você especifica para uma tabela temporária local pode ter no máximo 116 caracteres. Outros tipos de tabela podem ter 128 caracteres, mas as tabelas temporárias locais são anexadas automaticamente com um sufixo numérico gerado pelo sistema.
Exemplo 2 – Criar uma tabela temporária global
Aqui está um exemplo de criação de uma tabela temporária global:
CREATE TABLE ##Cats ( CatId int PRIMARY KEY, CatName varchar(70) );
Os nomes de tabelas temporárias globais podem ter no máximo 128 caracteres. O SQL Server não anexa um sufixo numérico gerado pelo sistema a tabelas temporárias globais como faz para tabelas temporárias locais, para que você possa usar todo o espaço.
Exemplo 3 – Visualize as Tabelas Temporárias
Posso executar a seguinte consulta para ver minhas tabelas temporárias recém-criadas.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#Cats%' OR name = '##Cats';
Resultado:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | +----------------------------------------------------------------------------------------------------------------------------------+
Podemos ver que a tabela temporária local teve o sufixo numérico gerado pelo sistema anexado, e é por isso que minha consulta usa o
LIKE
operador para essa tabela. Exemplo 4 – Nova sessão
Se eu abrir uma nova sessão, criar uma tabela temporária local com o mesmo nome (Cats) e executar essa consulta novamente, recebo isso:
+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | +----------------------------------------------------------------------------------------------------------------------------------+
Portanto, várias sessões podem criar uma tabela local com o mesmo nome porque o SQL Server modifica esse nome incrementando o sufixo.
Exemplo 5 - Mesma sessão
No entanto, se eu tentar criar a tabela temporária local novamente no mesmo sessão, recebo isso:
Msg 2714, Level 16, State 6, Line 1 There is already an object named '#Cats' in the database.
E se eu abrir mais uma sessão, terei sucesso, e quando eu consultar
tempdb.sys.tables
Eu entendi isso:+----------------------------------------------------------------------------------------------------------------------------------+ | name | |----------------------------------------------------------------------------------------------------------------------------------| | ##Cats | | #Cats_______________________________________________________________________________________________________________000000000018 | | #Cats_______________________________________________________________________________________________________________000000000019 | | #Cats_______________________________________________________________________________________________________________00000000001B | +----------------------------------------------------------------------------------------------------------------------------------+