Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/07/2014, 10:58
erickplc16
 
Fecha de Ingreso: mayo-2013
Mensajes: 17
Antigüedad: 10 años, 11 meses
Puntos: 0
Pregunta Update mediante un While

Que tal, les queria hacer una consulta, talvez a alguno de ustedes les ha pasado, veran estoy haciendo un update mediante un while, el cual en esta tabla hay aprox 350000 registros. la cuestion es que segun los calculos que hice cada insert esta tardando aprox 1.8 - 2.5 segundos ya por todos los registros son como 150 horas, alguno me podria decir que estoy haciendo mal?


Código SQL:
Ver original
  1. DECLARE @ciclo      SMALLINT     = 0
  2.     ,@v_xp_codigo       VARCHAR(MAX) = 0
  3.     ,@v_nombre          VARCHAR(MAX) = NULL
  4.     ,@v_ponderacion     VARCHAR(MAX) = 0
  5.     ,@v_id              BIGINT       = 0
  6.    
  7.     WHILE @ciclo = 0
  8.         BEGIN
  9.  
  10.             SELECT TOP 1 @v_xp_codigo = query01.xp_codigo
  11.             ,@v_nombre = query01.nombre
  12.             ,@v_ponderacion = query01.Todos
  13.             ,@v_id = query01.ID
  14.             FROM (
  15.                 SELECT xp_codigo
  16.                 , nombre
  17.                 , Todos
  18.                 , ID
  19.                 FROM #temp_segmentacion WITH(NOLOCK)
  20.             ) AS query01
  21.             WHERE query01.ID > @v_id
  22.             ORDER BY query01.ID ASC
  23.  
  24.             -- Termina Ciclo
  25.             IF @@rowcount=0
  26.             BEGIN
  27.                 SET @ciclo=1
  28.                 --SELECT @ciclo
  29.             END
  30.  
  31.             ELSE -- update
  32.             BEGIN
  33.  
  34.                 DECLARE @i_update nvarchar(MAX)=NULL
  35.                 SELECT @i_update = 'UPDATE #temp_segmentacion
  36.                                     SET [' +@v_nombre+ '] = '+@v_ponderacion+'
  37.                                     WHERE xp_codigo = ' + @v_xp_codigo
  38.                 EXECUTE sp_executesql  @i_update
  39.  
  40.             END        
  41.         END


alguna forma de optimizar esta consulta o alguna solucion?

muchas gracias por su ayuda.

Saludos