Ferramentas de Usuário

Ferramentas de Site


dev_geral:bases_de_dados:sql:cursores

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

Autoria

Escrito por Caça

dev_geral/bases_de_dados/sql/cursores.txt · Última modificação em: 2018/05/14 21:37 (edição externa)