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