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