No SQL Server, qual é a diferença entre uma tabela @, uma tabela # e uma tabela ##?
sql-server
Craig Schwarze
fonte
fonte
Dê uma olhada em
fonte
#
e as##
tabelas são tabelas reais representadas no banco de dados temporário. Essas tabelas podem ter índices e estatísticas e podem ser acessadas em sprocs em uma sessão (no caso de uma tabela temporária global, ela está disponível em todas as sessões).O @table é uma variável de tabela.
Para mais informações: http://www.sqlteam.com/article/temporary-tables
fonte
Eu me concentraria nas diferenças entre #table e @table. ## table é uma tabela temporária global e, para registro, em mais de 10 anos de uso do SQL Server, ainda não encontrei um caso de uso válido. Tenho certeza que alguns existem, mas a natureza do objeto o torna IMHO altamente inutilizável.
A resposta a @whiner por @marc_s é absolutamente verdadeira: é um mito prevalente que as variáveis de tabela sempre vivem na memória. Na verdade, é bastante comum que uma variável de tabela vá para o disco e opere como uma tabela temporária.
De qualquer forma, sugiro ler sobre o conjunto de diferenças seguindo os links apontados por @Astander. A maior parte da diferença envolve limitações sobre o que você não pode fazer com as variáveis @table.
fonte
Cria uma tabela que só é visível nessa CONEXÃO e durante essa CONEXÃO, o mesmo usuário que cria outra conexão não poderá ver a tabela #t da outra conexão.
Cria uma tabela temporária visível para outras conexões. Mas a tabela é descartada quando a criação da conexão é encerrada.
fonte
SqlConnection.Open()
com a mesma string de conexão é A mesma CONEXÃO ?se você precisar de uma tabela temporária global exclusiva, crie a sua própria com um prefixo / sufixo de identificador exclusivo e elimine a execução posterior se um if object_id (.... A única desvantagem é usar sql dinâmico e precisa ser eliminado explicitamente.
fonte