Jue
18
Oct

Cursor en MS-SQL


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

Si te gustó éste post, podés apoyar a PicandoCódigo a través de PayPal!

2 Comentarios para “Cursor en MS-SQL”

  1. Maxi a las 1:11 pm 5 Febrero. 2010
    Firefox 3.5.7Windows XP
    Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)

    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.

  2. fernando a las 1:15 pm 5 Febrero. 2010
    GNU IceCat 3.5.7GNU/Linux
    Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100107 IceCat/3.5.7 (like Firefox/3.5.7)

    Buenísimo que te haya servido.

    Cualquier duda que quede pasá por el foro de Programación.

    Saludos!

Trackbacks y pingbacks:

Dejar un comentario

Al agregar un comentario en esta página, usted acepta la siguiente licencia para su publicación:
Creative Commons License Creative Commons Attribution-Share Alike 3.0 Unported License.




Si quieres mostrar código, enciérralo entre los tags pre de esta forma:
<pre lang="L"> y </pre>, donde L es un lenguaje compatible GeSHI. Más info.

XHTML: Las siguientes tags están permitidas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">


Additional comments powered by BackType

Búsqueda personalizada