Cursor en MS-SQL
Publicado el Jueves, 18 de octubre de 2007Un 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í:
--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
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.
fernando 5 febrero. 2010 - 13:15
Buenísimo que te haya servido.
Cualquier duda que quede pasá por el foro de Programación.
Saludos!