Cursores en Microsoft SQL Server

 
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 FETCHINTO 

-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:
 
 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.