Utilizando tabelas temporárias

outubro 1, 2007

Vou lhes ensinar agora como utilizar tabelas temporárias em SQL. Eu conheço duas formas de utilização, sendo que uma requer menos recursos de hardware e o processo é mais rápido (de fato, bem mais rápido).

Segue abaixo o primeiro exemplo:

DECLARE @ID INT
DECLARE @TabelaTemporariaProduto TABLE (

ID INT

)

INSERT INTO

@TabelaTemporariaProduto
SELECT

ProdutoID

FROM

Produto

WHILE (SELECT COUNT(ID) FROM @TabelaTemporariaProduto) > 1

BEGIN

SELECT TOP 1 @ID = ID FROM @TabelaTemporariaProduto

PRINT @ID

DELETE FROM @TabelaTemporariaProduto WHERE ID = @ID

END

Vamos a explicação: as primeiras linhas correspondem a declaração de variáveis, uma do tipo INTEIRO e outra do tipo TABLE, que é um objeto que contém variados tipos de variáveis, não entendeu? Vou explicar melhor. Imagine um carro (Objeto) e suas caracteristicas são os tipos de variáveis, como: cor, cilindrada, portas, combustível, etc. Após isso há uma instrução INSERT, que insere os registros na tabela temporária os ‘IDs’ dos produtos da tabela ‘Produto’. Em seguida, possui uma repetição com uma instrução COUNT que faz a contagem de quantos registros existem na tabela temporária (@TabelaTemporariaProduto) e verifica se a contagem é maior que 1. Atribui o ‘ID’ do produto à variável ‘@ID’ e em seguida faz a impressão do valor, após isso exclui aquele registro da tabela temporária, se isso não ocorrer, o processo entra em looping infinito.

A próxima sequência de instrução SQL é bem mais rápida do que a anterior e utiliza outro tipo de repetição:

DECLARE @ID INT
DECLARE @TabelaTemporariaProduto TABLE (

ID INT

)

INSERT INTO

@TabelaTemporariaProduto
SELECT

ProdutoID

FROM

Produto

DECLARE TempCursor CURSOR

FOR

SELECT

ID

FROM

@TabelaTemporariaProduto

OPEN TempCursor

FETCH NEXT FROM

TempCursor

INTO

@ID

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT @IDFETCH NEXT FROM

TempCursor

INTO

@ID

END

CLOSE TempCursor
DEALLOCATE TempCursor

As primeiras linhas correspondem a declaração das variáveis, faz a inserção dos registros na tabela temporária, declara o CURSOR e informa os campos que irá participar da repetição. Faz a abertura do CURSOR‘ e atribui à variável (ID) o primeiro (e único) campo listado na consulta do CURSOR. A instrução @@FETCH_STATUS corresponde ao sucesso da operação (1 – Ok, -1 – Falhou e -2 – Linha perdida), faz a impressão do ‘@ID’ e em seguida move o ‘CURSOR‘.

Espero que tenham entendido o funcionamento das duas técnicas, deixe seu comentário referente ao artigo.

3 Respostas to “Utilizando tabelas temporárias”

  1. Ricardo Says:

    Dah hora esse Cursor, só usei uma vez e foi ctrl c ctrl v. Boa essa.

  2. Marco Aurelio Says:

    Cara eu estou com um problema na hora de executar o update no cod .

    “ADOConnectGS.Execute “Update #QTD_Sinistros set … ”

    O ADOConnectGS é a conexao com o banco de dados

    ADOConnectGS.Open “Provider=SQLNCLI;Server=;Database=;UID=;PWD=;”

    e da erro .. voce sabe pq ?

    Vlw pela ajuda .. abs


  3. No meu caso eu queria retornar um valor para poder ligar com outras tabelas como posso fazer?


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: