SQL Server - Error con Update por rangos de 200,000

 
Vista:
sin imagen de perfil

Error con Update por rangos de 200,000

Publicado por Luis Noriega (1 intervención) el 19/09/2017 00:58:40
Buenas tardes compañeros,

Necesito de su apoyo ya que estoy intentando realizar un UPDATE masivo en SQL Server, ya que estoy manejando una gran cantidad de datos y encontré en los foros que es la mejor forma de ralizarlo,

Utilizo el siguiente código:

/*INICIO*/

1
2
3
4
5
6
7
8
9
10
11
DECLARE @ind_v INT=1,
		@N_v INT = (SELECT COUNT(*) FROM PASO_ENDOSO)
WHILE(@ind_v <= (CEILING(@N_v/200000)+1))
	BEGIN
		UPDATE TOP(200000) PASO_ENDOSO
			SET VALID1=CONCAT(ramsubramo,'-',npoliza,'-',naseg,'-',ndepend,'-',folendoso),
				VALID2=CONCAT(ramsubramo,'-',REPLICATE('0',12-LEN(npoliza)),npoliza,'-',naseg,'-',REPLICATE('0',2-LEN(ndepend)),ndepend)
		SET @ind_v=@ind_v + 1
	END
 
/*FIN*/

Esta actualización se realiza "sin error" aparente, pero el problema que estoy teniendo es que mi tabla PASO_ENDOSO tiene poco más de 304 mil registros, pero el sistema me actualiza los primeros 200 mil renglones dos veces, en lugar de actualizarme los 304 mil registros, que es lo que yo esperaría que hiciera la sentencia,

Les agradezco mucho su apoyo con este pequeño problema y les deseo un excelente día!

Saludos desde la hermosa CDMX

Luis Noriega
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error con Update por rangos de 200,000

Publicado por JAMS (93 intervenciones) el 19/09/2017 22:40:28
La condición de tu ciclo de actualización es correcta, lo que esta mal es el update, no puedes poner fijo el numero de registros a actualizar


va un ejemplo para que lo puedas implementar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
declare @tabla table(campo1 int,campo2 varchar(100))
insert into @tabla values(1,'uno'),(2,'dos'),(3,'tres'),(4,'cuatro'),(5,'cinco'),
	(6,'seis'),(7,'siete'),(8,'ocho'),(9,'nueve'),(10,'diez')
 
 
DECLARE @ind_v INT=1,@ini int,@fin int,
	@N_v INT = (SELECT COUNT(*) FROM @tabla)
	set @ini=1
	set @fin=@N_v/2
	print @ini
	print @fin
 
 
WHILE(@ind_v <= (CEILING(@N_v/10)+1))
BEGIN
	UPDATE @tabla
		SET campo2='Actualiza ' + CAST(@ind_v AS VARCHAR(2))
		 Where campo1 BETWEEN @ini AND @fin
            SET @ind_v=@ind_v + 1
            SET @ini=@ini+ @fin
            set @fin=@N_v
            print @ini
            print @fin
 
END
 
SELECT * FROM @TABLA


saludos y suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar