É necessário usar # para criar tabelas temporárias no servidor SQL?

91

É necessário usar #antes de criar uma tabela temporária no servidor SQL?

Exemplo:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Para ItemBack1 é necessário usar o #símbolo?

Se não, qual é a utilidade de #criar tabelas temporárias?

Arun CM
fonte
3
Sim. # cria uma tabela temporária. Sem ele cria uma mesa.
Jeow Li Huan

Respostas:

151

Sim. Você precisa prefixar o nome da tabela com "#" (hash) para criar tabelas temporárias.

Se você NÃO precisar da tabela mais tarde, vá em frente e crie-a. As tabelas temporárias são muito semelhantes às tabelas normais. No entanto, ele é criado em tempdb. Além disso, só pode ser acessado através da sessão atual, ou seja, para EG: se outro usuário tentar acessar a tabela temporária criada por você, ele não poderá fazer isso.

"##" (hash duplo cria uma tabela temporária "Global" que pode ser acessada por outras sessões também.

Consulte o link a seguir para as Noções básicas de tabelas temporárias: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Se o conteúdo de sua tabela for inferior a 5000 linhas e NÃO contiver tipos de dados como nvarchar (MAX), varbinary (MAX), considere o uso de Variáveis ​​de Tabela.

Eles são os mais rápidos, pois são como quaisquer outras variáveis ​​armazenadas na RAM. Eles também são armazenados em tempdb, não na RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Mais informações sobre variáveis ​​de tabela: http://odetocode.com/articles/365.aspx

mobiledaemon
fonte
11
No SQL Server, a sintaxe SELECT é INSERT INTO @ ItemBack1 SELECT coluna1, coluna2, someInt, someVarChar FROM tabela2 WHERE tabela2.ID = 7
mhenry1384
8
As tabelas de variáveis ​​não são armazenadas na RAM, mas também no tempdb. Eu recomendaria não usar variáveis ​​de tabela, a menos que você entenda algumas de suas desvantagens, já que suas contagens de linha são automaticamente definidas como um, e planos ruins podem resultar.
ConstantineK de
Você pode fornecer uma fonte para as 5.000 linhas, restrições nvarchar (max), varbinary (max)? Isso é permitido, mas não sei por que não é recomendado.
Brad
1
Eu também pensei que as variáveis ​​da tabela fossem armazenadas na memória. Estou corrigido: dba.stackexchange.com/a/16386/23720
Baodad
1
Eu apenas comentarei também que é um fato que as variáveis ​​de tabela são armazenadas em tempdb. Estou comentando, então talvez MAIS pessoas leiam os comentários e entendam, já que estou tão cansado de entrar em uma articulação como consultor sênior para ter que discutir com um funcionário em tempo integral que é ignorante e tenta dizer o contrário. Estou falando sobre dezenas de empresas na Fortune 500, que fico feliz em ver os comentários das pessoas. Infelizmente, a menos que este OP que responde à pergunta realmente EDITE sua resposta, continuaremos a ter esse ignorante persistindo por mais uma década ou mais.
Tom Stickel
14

A diferença entre essas duas tabelas ItemBack1e #ItemBack1é que a primeira é persistente (permanente) enquanto a outra é temporária.

Agora, se você der uma olhada na sua pergunta novamente

É necessário usar # para criar a tabela temporária no servidor sql?

A resposta é Sim , porque sem isso #a tabela não será uma tabela temporária, ela será independente de todas as sessões e escopos.

Zzlalani
fonte