Avui un post senzill. Com declarar i utilitzar un cursor en SQL Server controlant errors, evitant que es quedi memòria assignada, etc.
--Variable estat del cursor
declare @cur_status int
--variables on assignarem els resultats del cursor
declare @a int
-- ..
-- ..
-- Si el cursor no existeix el creem
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status=-3 begin
--declarem el cursor
declare cur cursor for
-- query SQL
select 1 as a union all select 5
--Si el cursor no està obert, l'obrim
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status=-1
OPEN cur
-- assignem les variables al cursor
FETCH cur INTO @a --,@b, ..., @z
--Mentre hi hagi files al cursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- codi a executar per cada fila del cursor
print @a
-- assignem les següents variables al cursor
FETCH cur INTO @a --,@b, ..., @z
END --final del bucle
--Si el cursor està obert, el tanquem
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status>=0
close cur
--Si el cursor està assignat, el desassignem per deixar net l'stack de variables
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status<>-3
deallocate cur
end
else
print 'El cursor ja existeix '
Amb aquesta estructura d'script podem crear i utilitzar un cursor en SQL Server validant que no existeixi, obrint-lo només si fa falta i assegurant-nos que el tanquem i dessasignem per evitar futurs errors al reobrir-lo i evitant que es quedi memòria reservada que no utilitzem.
--Variable estat del cursor
declare @cur_status int
--variables on assignarem els resultats del cursor
declare @a int
-- ..
-- ..
-- Si el cursor no existeix el creem
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status=-3 begin
--declarem el cursor
declare cur cursor for
-- query SQL
select 1 as a union all select 5
--Si el cursor no està obert, l'obrim
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status=-1
OPEN cur
-- assignem les variables al cursor
FETCH cur INTO @a --,@b, ..., @z
--Mentre hi hagi files al cursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- codi a executar per cada fila del cursor
print @a
-- assignem les següents variables al cursor
FETCH cur INTO @a --,@b, ..., @z
END --final del bucle
--Si el cursor està obert, el tanquem
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status>=0
close cur
--Si el cursor està assignat, el desassignem per deixar net l'stack de variables
SELECT @cur_status=CURSOR_STATUS('global','cur')
if @cur_status<>-3
deallocate cur
end
else
print 'El cursor ja existeix '
Amb aquesta estructura d'script podem crear i utilitzar un cursor en SQL Server validant que no existeixi, obrint-lo només si fa falta i assegurant-nos que el tanquem i dessasignem per evitar futurs errors al reobrir-lo i evitant que es quedi memòria reservada que no utilitzem.