19
Armazenamento Temporário e Common Table Expressions (CTE)

Armazenamento Temporário e CTEs - SQL Server

Embed Size (px)

Citation preview

Page 1: Armazenamento Temporário e CTEs - SQL Server

Armazenamento Temporário eCommon Table Expressions (CTE)

Page 2: Armazenamento Temporário e CTEs - SQL Server

Agenda

1. Variáveis T-SQL

2. Tabelas Temporárias

3. Variáveis tipo TABLE

4. CTE

5. CTE Recursiva

6. DEMOS

7. Perguntas ?

Page 3: Armazenamento Temporário e CTEs - SQL Server

Variáveis T-SQLUma variável local Transact-SQL é um objeto que pode conter um valor de dados de um tipo específico. As variáveis em lotes e scripts são normalmente usadas:

Como um contador, para contar o número de vezes que um loop é executado ou controlar quantas vezes que o loop é executado.

Para reter um valor de dados a ser testado por uma instrução de controle de fluxo.

Para salvar um valor de dados a ser retornado por um código de retorno de procedimento armazenado ou valor de retorno de função.

Fonte: http://msdn.microsoft.com/pt-br/library/ms187953(v=sql.105).aspx

Page 4: Armazenamento Temporário e CTEs - SQL Server

Variáveis T-SQL

Page 5: Armazenamento Temporário e CTEs - SQL Server

Tabelas TemporáriasHá dois tipos de tabelas temporárias: local e global.

Elas diferem uma da outra pelo nome, visibilidade e disponibilidade.

As tabelas temporárias locais têm um único sinal (#) como primeiro caractere no nome; elas são visíveis somente na conexão atual para o usuário e são excluídas quando o usuário se desconecta da instância do SQL Server.

As tabelas temporárias globais têm dois sinais (##) como primeiros caracteres no nome; elas são visíveis a qualquer usuário após serem criadas e são excluídas quando todos os usuários que consultam a tabela se desconectam da instância do SQL Server.

Page 6: Armazenamento Temporário e CTEs - SQL Server

Tabelas Temporárias

São gravadas fisicamente, armazenadas no banco de sistema (tempdb)

Permite utilizar índices (o que pode gerar ganho de performance)

São visíveis apenas enquanto a conexão está ativa

TempDB: http://msdn.microsoft.com/pt-br/library/ms190768.aspx

Page 7: Armazenamento Temporário e CTEs - SQL Server

Tabelas Temporárias

Page 8: Armazenamento Temporário e CTEs - SQL Server

Variáveis tipo TABLE Criadas apenas dentro do escopo (da procedure, trigger ou do lote que foram construídas)

Armazenadas em disco!

Gasta menos recursos com bloqueio

As operações são minimamente logadas (consumindo então menos recurso de log)

Quando utilizadas em stored procedures, geram menos recompilações do que se fossem utilizadas tabelas temporárias

Não podem ser alvos de SELECT/INTO ou INSERT/EXEC

Não podem ter índices não-cluster

Não é possível criar e/ou atualizar estatísticas

Não se pode mudar sua estrutura depois que ela for criada (adicionar uma coluna, por exemplo)

Page 9: Armazenamento Temporário e CTEs - SQL Server

Variáveis tipo TABLE

Page 10: Armazenamento Temporário e CTEs - SQL Server

Links

Perguntas freqüentes - variáveis de tabela

SQL SERVER – Difference TempTable and Table Variable –

TempTable in Memory a Myth

Page 11: Armazenamento Temporário e CTEs - SQL Server

CTEChamamos de common table expression o conjunto de resultados

temporário que se define no escopo de execução de uma instrução

SELECT, INSERT, UPDATE, DELETE ou CREATE VIEW.

As CTEs não são armazenadas como objetos e conservam-se

apenas durante a consulta, sendo, por estes motivos, parecidas

com as tabelas derivadas (ou variáveis tipo TABLE).

Page 12: Armazenamento Temporário e CTEs - SQL Server

CTEO uso de CTEs está voltado para as seguintes finalidades:

Para criar uma consulta recursiva;

Para substituir uma view nas situações em que seu uso geral

não é exigido;

Para habilitar o agrupamento por uma coluna derivada em um

subselect escalar;

Para referenciar diversar vezes na mesma instrução a tabela

resultante;

Page 13: Armazenamento Temporário e CTEs - SQL Server

CTE Usar uma CTE oferece as vantagens de legibilidade aprimorada e facilidade de manutenção de consultas complexas. A consulta pode ser dividida em blocos de construção lógicos simples e separados. Esses blocos simples podem ser usados para criar CTEs interinas mais complexas, até que o resultado final seja gerado.

As CTEs podem ser definidas em rotinas definidas pelo usuário, como funções, procedimentos armazenados, gatilhos ou exibições. CTEs também podem ser aninhadas.

Page 14: Armazenamento Temporário e CTEs - SQL Server

Estrutura de uma CTEUma CTE é constituída de um nome de expressão representando a CTE, uma lista de colunas opcional e uma consulta que define a CTE. Após a definição da CTE, ela poderá ser referenciada como uma tabela ou exibição em uma instrução SELECT, INSERT, UPDATE ou DELETE. Uma CTE também pode ser usada em uma instrução CREATE VIEW como parte da instrução SELECT que a define.

A estrutura de sintaxe básica de uma CTE é:

Page 15: Armazenamento Temporário e CTEs - SQL Server

Relatório de Pedidos

Page 16: Armazenamento Temporário e CTEs - SQL Server

Relatório de Pedidos

Page 17: Armazenamento Temporário e CTEs - SQL Server

CTE RecursivaCom as CTEs também é possível escrever consultas recursivas, as quais são formadas por três elementos: a invocação da rotina, a invocação recursiva da rotina e a verificação de finalização.

Uma CTE recursiva é capaz de retornar diversas linhas, ao contrario de uma rotina recursiva de outras linguagens, que retorna um valor escalar.

Enquanto criamos a CTE, podemos modificar sua consulta. Para isto basta criar a consulta do membro âncora, adicionar o operador UNION ALL e, então, criar a consulta do membro recursivo que fala auto-referência à CTE.

Page 18: Armazenamento Temporário e CTEs - SQL Server

CTE Recursiva

CTE Recursiva: http://msdn.microsoft.com/pt-br/library/ms186243(v=sql.105).aspx

Page 19: Armazenamento Temporário e CTEs - SQL Server

CTE Recursiva