A expressão de tabela comum ou o CTE é o conjunto de resultados nomeado, que foi introduzido no SQL Server 2005. A expressão comum da tabela atua como uma tabela virtual com registros e colunas criadas durante a execução de uma consulta com CTE e liberada após a conclusão da consulta. Pode ser referenciado em qualquer instrução Select, Inserir, Atualizar ou Excluir. Isso é usado para criar uma visão também.
CTE pode ser definido pela sintaxe abaixo.
[COM [… ]]
Nome de CTE [(Nome das colunas [,…])]
Como (consulta de CTE)
Selecione * de CTE
Exemplo:
Com cte_name (coluna1, column2, column3)
Como
(
Selecione Column1, Column2, Column3
Da Tabela 1
Onde coluna 1> 500
)
De acordo com o exemplo, depois de definir o cte cte_name, podemos usar o CTE imediatamente após defini -lo como uma tabela. Abaixo está um exemplo:
Selecione em cte_name
Ele retornará a saída de três colunas, coluna1, coluna2 e coluna3.
Pode ser usado nas declarações de inserção, excluir, atualizar e mesclar também. Vamos mostrar um exemplo de cada um abaixo.
Múltiplo CTE
Múltiplo CTE pode ser usado em uma única consulta.
Com cte_name1 (coluna1, column2, column3)
Como
(
Selecione Column1, Column2, Column3
Da Tabela 1
Onde coluna 1> 100
)
COMO
(
Selecione * de cte_name2
onde coluna2> 200
)
Selecione * de cte_name2
A consulta acima retornará os registros da tabela Tabela1 em que a coluna 1 é maior que 100 e a coluna 2 é maior que 200.
Exclua usando CTE
O CTE pode ser muito útil para excluir registros de uma tabela.
Com cte_name (coluna1, column2, column3)
Como
(
Selecione Column1, Column2, Column3
Da Tabela 1
Onde coluna 1> 100
)
Exclua de cte_name
A declaração acima excluirá os registros da tabela base: Tabela Tabela1, onde o valor da coluna 1 é superior a 100.
Esta também é a maneira eficiente de eliminar entradas duplicadas de uma mesa. Abaixo está o exemplo.
Com cte_name (id, column1, column2, column3, rn)
Como
(
Selecione ID, Column1, Column2, Column3, Row_Number () sobre (Partição por ID Order by ID) como RN
Da Tabela 1
)
Exclua de cte_name
Onde cte_name. Rn> 1
Isso excluirá todas as linhas duplicadas da tabela Tabela1.
Insira usando CTE
Podemos inserir um conjunto de dados específico que é definido em um CTE em outra mesa. Olhe para o exemplo abaixo.
Com cte_insert (id, column1, column2, column3)
Como
(
Selecione ID, Column1, Column2, Column3
Da Tabela 1
Onde coluna 1> 200
)
/* Para inserção em uma tabela existente Dest_table*/
Inserir em dest_table (column1, column2, column3)
Selecione Column1, Column2, Column3 de CTE_INSERT
/ * Para criar uma nova tabela dest_table_new e insira os dados do CTE */
Selecione Column1, Column2, Column3
Em dest_table_new
A declaração acima criará a tabela com as três colunas- coluna1, coluna2, column3 e inserir dados nela.
Atualizar usando CTE
O conceito de atualização usando CTE é o mesmo que inserção e exclusão. Vamos verificar o exemplo abaixo.
Com cte_update (id, column1, column2, column3)
Como
(
Selecione ID, Column1, Column2, Column3
Da Tabela 1
Onde coluna 1> 200
)
/* Atualize a tabela base- Tabela1, do CTE para aumentar o valor da coluna1 por 100*/
Atualize CTE_UPDATE
Set Column1 = Column1+100
/*Atualize outra tabela - DEST_TABLE, usando o valor de CTE*/
Atualizar a
defina a.coluna 1 = b.coluna1
de dest_table a
Junte -se a cte_update b
com um.id = b.eu ia
Merge usando CTE
Consulte o exemplo abaixo para obter uma melhor compreensão.
Com src_cte (id, column1, column2, column3)
COMO
(
Selecione ID, Column1, Column2, Column3 de SRC_TABLE
)
Mesclar
tgt_tbl como alvo
Usando SRC_CTE como fonte
On (alvo.id = fonte.eu ia)
Quando correspondido então
Atualizar Definir destino.Coluna1 = fonte.Coluna1,
alvo.Coluna2 = fonte.Coluna2,
alvo.Coluna3 = fonte.Coluna3
Quando não comparado então
Inserir valores (coluna 1, colunla, colunl3) (fonte.Coluna1, fonte.Column2, fonte.Column3);
Na consulta acima, estamos tentando carregar dados incrementalmente do SRC_TABLE para o TGT_TABLE.
Como CTE, tabela temp e variável temp são adiadas no servidor SQL?
A partir dos últimos exemplos, conhecemos os usos do CTE e tivemos uma idéia clara do que é CTE. Agora, a diferença entre o CTE é e a tabela de temperatura e a variável temp é:
Conclusão
O CTE pode ser útil quando você precisar gerar conjunto de resultados temporários e pode ser acessado em instrução selecionada, inserir, atualizar, excluir e mesclar. Pode ser muito otimizado em termos de CPU e usos de memória.