Para quem desconhece, um Cursor é uma estrutura de dados Transact-SQL que permite percorrer as linhas retorno de uma consulta SQL e executar uma ou várias ações. Basicamente funciona como um loop através dos registros de uma consulta.

No exemplo abaixo irei demonstrar uma estrutura básica de um Cursor simples que irá percorrer uma tabela de clientes atualizando o nome completo de cada cliente baseado no primeiro nome e sobrenome.

DECLARE @codcliente int, @primeironome VARCHAR(30), @sobrenome VARCHAR(60), @nomecompleto VARCHAR(90)

— Cursor para percorrer os registros
DECLARE cursor1 CURSOR FOR
select codcliente, nome, sobrenome from clientes

–Abrindo Cursor
OPEN cursor1

— Lendo a próxima linha
FETCH NEXT FROM cursor1 INTO @codcliente, @primeironome, @sobrenome

— Percorrendo linhas do cursor (enquanto houverem)
WHILE @@FETCH_STATUS = 0
BEGIN

— Executando as rotinas desejadas manipulando o registro
update clientes set nomecompleto = @primeironome + ‘ ‘ + @sobrenome where codcliente = @codcliente

— Lendo a próxima linha
FETCH NEXT FROM cursor1 INTO @codcliente, @primeironome, @sobrenome
END

— Fechando Cursor para leitura
CLOSE cursor1

— Finalizado o cursor
DEALLOCATE cursor1

A ideia deste artigo é apresentar um “Modelo” de cursor que possa ser copiado e alterado de acordo com sua necessidade já que a estrutura dele é um pouco chata de se lembrar quando precisamos utilizar.

Até a próxima.

7 Comments

  • Lenofevereiro 3, 2016

    Exemplo simples e bem pratico e bem explicado, facilita o entendimento de Cursores. Parabens.

  • Tibériofevereiro 3, 2016

    Muito bom… prático e objetivo. Excelente. Parabéns!!

    Alexandrefevereiro 3, 2016

    Muito bom! direto ao ponto.

    Júnior Pachecofevereiro 3, 2016

    Entendi já de primeira o funcionamento do Cursor.
    Obrigado

    Júnior Pachecofevereiro 3, 2016

    Obrigado por compartilhar!

    Antônio Lopesfevereiro 3, 2016

    Parabéns, me ajudou a relembrar a estrutura mesmo 😉

    Natanfevereiro 3, 2016

    Valeu cara, esse exemplo ajudou muito!

Comments are closed.