Cursor MS-SQL

En Transact SQL un cursor es una herramienta muy útil que nos permite recorrer los registros de uno en uno. Su equivalente en cualquier lenguaje de programación sería usar un for o un for each pero esta vez aplicado a una consulta Select.

Su estructura es la siguiente:

--Creamos una tabla temporal donde guardar los registros 
--que el cursor nos traiga
DECLARE @temporal TABLE (dato1 INT, dato2 VARCHAR(20))
--Declaramos una variable para guardar los nombres
DECLARE @Nombre VARCHAR(20)
--Declaramos el cursor de nombre 'db_cursor'
DECLARE db_cursor CURSOR FOR
--Este cursor va a levantar todos los Id´s y nombres de clientes
SELECT Id, Nombre FROM Clientes WHERE Condiciones
--Se abre el cursor
OPEN db_cursor
--Con FetchNext, obtenemos el siguiente registro
FETCH NEXT FROM db_cursor
--Y lo guardamos en la tabla en memoria
--Si se quiere guardar los registros derecho a una tabla,
--la cantidad de campos de la tabla debe ser mayor o igual
--a la cantidad de campos levantados
INTO @temporal
WHILE @@FETCH_STATUS = 0
--También se puede guardar en una variable, si levantamos
--un solo campo con el cursor.
BEGIN
--Acá podemos trabajar con los datos que levantamos, el código
--después del begin se va a ejecutar por cada registro que levante
--el select del cursor.
SET @Algo = (SELECT algo FROM algunaTabla WHERE condiciones)
--Irreverencias de ejemplo:
INSERT INTO AlgunaTabla VALUES(@Variable1, @Variable2)
--Obtenemos el siguiente registro:
FETCH NEXT FROM db_cursor
INTO @temporal
END
--se cierra el cursor:
CLOSE Recorredor
DEALLOCATE Recorredor

Comments are closed here.