Ir para o conteúdo

Trabalhar com cursores

Este exemplo mostra como trabalhar com um cursor sobre uma tabela

Estrutura da tabela

CREATE TABLE [dbo].[Artigos](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Marca] [varchar](50) NOT NULL,
    [Modelo] [varchar](50) NOT NULL,
    [Descr] [varchar](max) NULL,
 CONSTRAINT [PK_Artigos] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
END

Código

--Variáveis necessárias para armazenar cada linha da tabela
DECLARE @ID Int, @Marca VarChar (50), @Modelo VarChar (50), @Descr VarChar (MAX)
--Declara um novo cursor sobre a query indicada
DECLARE _Cursor CURSOR FOR SELECT * FROM Artigos
OPEN _Cursor
--Posiciona-se na primeira linha
FETCH NEXT FROM _Cursor INTO @ID, @Marca, @Modelo, @Descr
WHILE (@@FETCH_STATUS = 0)--'@@FETCH_STATUS = 0' significa que ainda existem registos que não foram percorridos
BEGIN
    --Efectua as operações desejadas aqui
    PRINT '-----'
    PRINT 'ID: ' + CONVERT(VarChar, @ID)
    PRINT 'Marca: ' + @Marca
    PRINT 'Modelo: ' + @Modelo
    PRINT 'Descr: ' + @Descr
    PRINT '-----'
    --No final posiciona-se o cursor na próxima linha
    FETCH NEXT FROM _Cursor INTO @ID, @Marca, @Modelo, @Descr
END
--Deve-se sempre fechar
CLOSE _Cursor
--Limpa a memoria
DEALLOCATE _Cursor