Cursor en MS-SQL

Publicado el 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.

    Firefox 3.5.7 Windows XP

Dejar un comentario

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.

Toasty!