Cursor en MS-SQL

Publicado el Jueves, 18 de octubre de 2007

Un cursor en Transact SQL es una herramienta que permite recorrer los registros de una consulta de a uno. Sería el equivalente a usar un for o for each para recorrer una consulta SELECT. Su uso es bastante sencillo, el código es así:

--Declaramos una tabla en memoria donde guardar
--los registros que levante el cursor.
DECLARE @tabla TABLE (campo1 INT, campo2 VARCHAR(20))

--Declaramos una variable para guardar los nombres
DECLARE @Nombre VARCHAR(20)

--Declaramos el cursor de nombre 'Recorredor'
DECLARE Recorredor 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 Recorredor
     --Con FetchNext, obtenemos el siguiente registro
     FETCH NEXT FROM Recorredor
     --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 @tabla
     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 Recorredor
     INTO @tabla
     END
--se cierra el cursor:
CLOSE Recorredor
DEALLOCATE Recorredor

2 comentarios en este post

Feed de comentarios
  1. Avatar

    Maxi 5 febrero. 2010 - 13:11

    Gracias Capo… creo que con esto solucionaría el problema que me trae mal hace una semana.
    Necesito recorrer una tabla y poner en columnas un par de datos que se repiten en el registro siguiente.
    Ej.: Tabla Original
    Emp entrada1 salida1
    1 12/01/2009 12:30 12/01/2009 16:40
    1 12/01/2009 18:05 12/01/2009 22:30

    Tabla Necesitada
    Emp entrada1 salida1 entrada2 salida2
    1 12/01/2009 12:30 12/01/2009 16:40 12/01/2009 18:05 12/01/2009 22:30

    Espero se entienda.
    Muchas gracas y te cuento cómo me fue!
    Saludos.

Dejar un comentario

Toasty!