Armazenamento Temporário e CTEs - SQL Server

Preview:

Citation preview

Armazenamento Temporário eCommon Table Expressions (CTE)

Agenda

1. Variáveis T-SQL

2. Tabelas Temporárias

3. Variáveis tipo TABLE

4. CTE

5. CTE Recursiva

6. DEMOS

7. Perguntas ?

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

Variáveis T-SQL

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.

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

Tabelas Temporárias

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)

Variáveis tipo TABLE

Links

Perguntas freqüentes - variáveis de tabela

SQL SERVER – Difference TempTable and Table Variable –

TempTable in Memory a Myth

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).

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;

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.

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 é:

Relatório de Pedidos

Relatório de Pedidos

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.

CTE Recursiva

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

CTE Recursiva

Recommended