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