none
Recorrer consulta SQL RRS feed

  • Pregunta

  • Buena tarde, como puedo recorrer una consulta y obtener sus datos 1 x 1 para hacer actualizaciones algo parecido al foreach en visual studio por ejemplo: 

    Tengo estos registros de consulta

               id--importe
               1--250
               9--500
    lo que quiero hacer es recorrer cada registro, asi: 

             id--importe
               1--250
              UPDATE
            SEGUNDA VUELTA
            id--importe
               9--500
              UPDATE

    miércoles, 26 de septiembre de 2018 21:15

Respuestas

  • Una opción es con un cursor, otra con una tabla temporal tomando el primer registro

    SELECT identity(smallint, 1, 1) as orden, id, importe 
     into #tmp
     FROM  tabla

    while exists(select orden from #tmp)
      begin
          select top 1 @orden = orden from #tmp
          update.....
           delete #tmp where orden = @orden
      end

    jueves, 27 de septiembre de 2018 1:01

Todas las respuestas

  • Lo que estas buscando son los cursores de SQL
    miércoles, 26 de septiembre de 2018 21:42
  • Si lo que quieres es recorrer filas entonces buscas un cursor, pero siempre que puedas evitar el uso de cursores hazlo, sql esta orientado al manejo de conjuntos de registros y no a registros individuales, por lo que si quieres hacer un update debes hacerlo en una instrucción que afecte a todos los registros deseados y no recorrer los registros e irlos actualizando uno a uno, además recuerda que la instrucción "UPDATE mi_tabla..." por defecto va aplicarse para todos los registros de la tabla , si nos explicas que pretendes lograr con tu update podríamos orientarte mejor.


     
    miércoles, 26 de septiembre de 2018 21:53
  • Una opción es con un cursor, otra con una tabla temporal tomando el primer registro

    SELECT identity(smallint, 1, 1) as orden, id, importe 
     into #tmp
     FROM  tabla

    while exists(select orden from #tmp)
      begin
          select top 1 @orden = orden from #tmp
          update.....
           delete #tmp where orden = @orden
      end

    jueves, 27 de septiembre de 2018 1:01
  • de hecho es como lo estoy manejando, muchas gracias
    jueves, 27 de septiembre de 2018 20:27
  • El update era como ejemplo, pero bien necesito hacer un insert con los datos de esa consulta, el problema es que en mi codigo recorre el foreach y solo da una vuelta y en sql necesito recorrerlo de esa manera para no mover toda mi estructura de codigo :(
    jueves, 27 de septiembre de 2018 20:29