15/04/2015

SQLSERVER - TEMPORARIA COM WITH

Bom dia!

Tenho duvidas na utilização da cláusula WITH para criação de tabelas temporárias. Não entendi muito bem no MSDN e não achei conteúdo na internet sobre o assunto.

Até onde sei, ele cria tabela temporária, porem gostaria de um exemplo com a sintaxe.

Sei que as tabelas criadas com # são temporárias com visualização apenas a sessão que a criou. E as temporárias criadas com ## são visiveis a todas as sessões, logicamente desde que tenham permissão, para acessar o banco em que foi criada.

E quanto as temporárias com WITH, ficam atreladas a sessão que criou? Qual a diferença em relação as # e ##?

Obrigado!

Diego Segismundo

Melhor resposta

15/04/2015

Fisicamente... o objeto criado com WITH, difere das TEMPs padrão, por não ser criado fisicamente no banco e por ter seu tempo de vida restrito ao escopo de execução da query.

Logicamente... o uso de uma CTE permite o tratamento de algumas estruturas avançadas, que não são implementadas de maneira trivial com outros elementos disponíveis.

Dentre esses destaco :

> "Group by" de uma função não determinística ( ou externa )
> Referência ao resultado da "temporária" várias vezes na mesma query
> Queries recursivas, aonde você refina a seleção a partir da mesma sintaxe

Acaba sendo um paradigma um pouco diferente de uso, mas muito próximo das TEMPs tradicionais...

Achei um link bacana em : balaiotecnologico

Marcos P

Responder Citar

Outras Respostas

15/04/2015

Jothaz

Inicialmente leia [url:descricao=WITH common_table_expression (Transact-SQL)]https://msdn.microsoft.com/pt-br/library/ms175972.aspx?f=255&MSPPError=-2147217396[/url]

Dai post suas dúvidas.

O WIHT cria um conjunto de registros chamado de CTE (expressão de tabela comum). É uma espécie de tabela temporária que dura apenas uma consulta e, em seguida, desaparece por si só e não gera um objeto table como os resultados no tempdb.

Talvez o mais importe sobre o WITH é que a definição da tabela pode referir-se a si mesmo de forma recursiva.
Responder Citar

15/04/2015

Diego Segismundo

Jhotaz, obrigado pela resposta.
Porem, como informei no meu post inicial:

"... Não entendi muito bem no MSDN."

Por isso o link não vai me esclarecer muita coisa.

Obrigado.
Responder Citar

15/04/2015

Jothaz

Jhotaz, obrigado pela resposta. Porem, como informei no meu post inicial: "... Não entendi muito bem no MSDN." Por isso o link não vai me esclarecer muita coisa. Obrigado.


Você leu o que postei abaixo do link?

Qual dúvida ainda persiste?

Na internet existem centenas de post sobre o assunto:

SQLSERVER WITH vs temp table

Muitos estão em inglês, mas infelizmente são ossos do ofício.
Responder Citar

15/04/2015

Marcos P

E aí Diego... sim, não ou talvez ?
Responder Citar

15/04/2015

Marcos P

E aí Diego... sim, não ou talvez ?
Responder Citar

15/04/2015

Roniere Almeida

Diego, passando aqui para postar mais dicas:

[url]http://www.devmedia.com.br/tabelas-temporarias-no-sql-server/2610[/url]

[url]http://www.devmedia.com.br/t-sql-e-a-utilizacao-de-tabelas-temporarias/31131[/url]
Responder Citar

15/04/2015

Diego Segismundo

Sensacional!

Muito obrigado.
Responder Citar

15/04/2015

Roniere Almeida

Disponha Diego, mais duvidas, é só perguntar!
Responder Citar