Tabelas do servidor SQL: Qual é a diferença entre @, # e#?

no servidor SQL, Qual é a diferença entre uma tabela@, uma tabela # e uma tabela##?

 81
Author: Craig Schwarze, 2010-02-08

6 answers

#table refere-se a uma tabela temporária local (visível apenas para o utilizador que a criou).

##table refere-se a uma tabela temporária global (visível para todos os usuários).

@variableName refere-se a uma variável que pode conter valores dependendo de seu tipo.

Saúde.
 100
Author: Arnkrishn, 2010-02-08 05:23:33

# e as tabelas ## são as tabelas reais representadas na base de dados temp. Estas tabelas podem ter índices e estatísticas, e podem ser acessadas através de sprocs em uma sessão (no caso de uma tabela global temp, está disponível em todas as sessões).

A tabela @é uma variável de tabela.

Para mais: http://www.sqlteam.com/article/temporary-tables

 7
Author: whiner, 2010-02-08 05:44:57

Eu concentrar-me-ia nas diferenças entre a tabela #e a tabela@. ## table is a global temporary table and for the record in over 10 years of using SQL Server I have yet to meet a valid use case. Tenho a certeza que alguns existem, mas a natureza do objecto torna-o altamente inutilizável IMHO.

A resposta a @whiner por @marc_s é absolutamente verdadeira: é um mito prevalente que as variáveis da tabela sempre vivem na memória. É realmente bastante comum para uma variável da tabela ir ao disco e operar como uma mesa temporária.

Seja como for, sugiro que se Leia o conjunto de diferenças seguindo os links apontados por @Astander. A maior parte da diferença envolve limitações no que você não pode fazer com as variáveis @table.

 6
Author: Aaron Bertrand, 2010-02-08 06:33:57
CREATE TABLE #t

Cria uma tabela que só é visível nessa ligação e durante essa ligação o mesmo usuário que cria outra conexão não será capaz de ver a tabela #t da outra conexão.

CREATE TABLE ##t

Cria uma tabela temporária visível para outras ligações. Mas a tabela é deixada cair quando a conexão de criação é terminada.

 4
Author: Markus, 2018-02-20 14:24:45

Se precisar de uma tabela temporária global única, crie a sua própria com um prefixo / sufixo Uniqueidentifier e largue a execução Pós-se for um object_id if(.... A única desvantagem é usar SQL dinâmico e precisa cair explicitamente.

 0
Author: Schmed, 2016-05-02 12:45:54