Manejo de Cursores en SQL Server (es-ES)

Manejo de Cursores en SQL Server (es-ES)

CURSORES

Un cursor es una estructura de datos creada en memoria RAM producto de una sentencia SELECT y que nos permite navegar dentro de las filas para obtener la información.
Cuando trabajemos con cursores debemos seguir los siguientes pasos.
-Declarar el cursor, utilizando DECLARE 
-Abrir el cursor, utilizando OPEN 
-Leer los datos del cursor, utilizando FETCH ... INTO 
-Cerrar el cursor, utilizando CLOSE
-Liberar el cursor, utilizando DEALLOCATE
use northwind
go
--Declarando el cursor
Declare Cursor1 Cursor scroll
for select * from dbo.customers
--Abrir el cursor
Open Cursor1
--Navegar
Fetch first from Cursor1
--cerrar el cursor
Close Cursor1
--liberar de memoria
Deallocate Cursor1

 

La sintaxis general para trabajar con un cursor es la siguiente.
-- Declaración del cursor
DECLARE[NOMBRE CURSOR]CURSOR[ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] FOR [SENTENCIA DE SQL (SELECT)]
-- Apertura del cursor
OPEN[NOMBRE CURSOR] 
-- Lectura de la primera fila del cursor

FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS]
WHILE(@@FETCH_STATUS= 0) BEGIN 
-- Lectura de la siguiente fila de un cursor
FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS] ...
-- Fin del bucle WHILE
END

-- Cierra el cursor
CLOSE[NOMBRE CURSOR]
-- Libera los recursos del cursor
DEALLOCATE
[NOMBRE CURSOR]
El siguiente ejemplo muestra un ejemplo de cursor usando la base de datos northwind.
----Ejemplo 2 Cursores
Declare @codigo varchar(5),
@compania varchar(200),
@contacto varchar(150),
@pais varchar(100)
Declare ccustomers cursor GLOBAL
for Select customerid, companyname, contactname
, country from customers
Open ccustomers
fetch ccustomers into @codigo, @compania, @contacto,
@pais
while(@@fetch_status=0)
begin
print @codigo +' '+ @compania +' '+ @contacto +' '+@pais
fetch ccustomers into @codigo, @compania, @contacto,
@pais
end
close ccustomers
deallocate ccustomers
GO
Cuando trabajamos con cursores, la función @@FETCH_STATUS nos indica el estado de la última instrucción FETCH emitida, los valores posibles son:
Valor devuelto
Descripción
0
La instrucción FETCH se ejecutó correctamente.
-1
La instrucción FETCH no se ejecutó correctamente o la fila estaba más allá del conjunto de resultados.
-2
Falta la fila recuperada.
Para actualizar los datos de un cursor debemos especificar FOR UPDATE después de la sentencia SELECT en la declaración del cursor, y WHERE CURRENT OF [Nombre Cursor] en la sentencia UPDATE tal y como muestra el siguiente ejemplo.
----Ejemplo 3 Cursores Actualizar datos
Declare @codigo varchar(5),
@compania varchar(200),
@contacto varchar(150),
@pais varchar(100)
Declare ccustomers cursor GLOBAL
for Select customerid, companyname, contactname
, country from customers FOR UPDATE
Open ccustomers
fetch ccustomers into @codigo, @compania, @contacto,
@pais
while(@@fetch_status=0)
begin
UPDATE customers
set companyname = @compania + '(Modificado)'
where current of ccustomers
fetch ccustomers into @codigo, @compania, @contacto,
@pais
end
close ccustomers
deallocate ccustomers
go
En la apertura del cursor, podemos especificar los siguientes parámetros:
  DECLARE<nombre_cursor>CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ][ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ]
FOR Sentencia_sql
Para consultar cada parámetro el link es:
Leave a Comment
  • Please add 3 and 6 and type the answer here:
  • Post
Wiki - Revision Comment List(Revision Comment)
Sort by: Published Date | Most Recent | Most Useful
Comments
  • LeoPonti edited Revision 1. Comment: Excelente articulo!! sume el detalle de idioma es-ES en la lista de Tags

Page 1 of 1 (1 items)
Wikis - Comment List
Sort by: Published Date | Most Recent | Most Useful
Posting comments is temporarily disabled until 10:00am PST on Saturday, December 14th. Thank you for your patience.
Comments
  • LeoPonti edited Revision 1. Comment: Excelente articulo!! sume el detalle de idioma es-ES en la lista de Tags

Page 1 of 1 (1 items)