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.