Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Update!

Estas en el tema de Update! en el foro de SQL Server en Foros del Web. Hola ! Tengo otra duda :( Es posible hacer un update a todos los registros de la tabla . que haga lo siguiente, pero sin ...
  #1 (permalink)  
Antiguo 15/06/2011, 14:50
Avatar de Flakiss  
Fecha de Ingreso: septiembre-2009
Mensajes: 113
Antigüedad: 15 años, 1 mes
Puntos: 1
Update!

Hola !

Tengo otra duda :(

Es posible hacer un update a todos los registros de la tabla .

que haga lo siguiente, pero sin ayuda de un ciclo u otra cosa.
Solo el UPDATE.

tengo 100 registros en la tabla y necesito que se ejecute un update que
los primeros registros los marque con un estado 1
los otros 10 registro los marque con estado 2
y hasta marcar con el estado 10

tendria 10 grupos ...

tendre que jugar con el total de registros ??

como puedo hacer eso??
  #2 (permalink)  
Antiguo 15/06/2011, 14:58
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Update!

podrias usar GROUP BY y deacuerdo a eso podrias aplicar tu update para los estados, si tienes un campo identity mucho mejor.

la otra forma que se me ocurre es Aplicando un COUNT() con un selecte y un filtro dentro y a eso le aplicas el update
  #3 (permalink)  
Antiguo 15/06/2011, 15:05
Avatar de Flakiss  
Fecha de Ingreso: septiembre-2009
Mensajes: 113
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Update!

y por cual criterio agruparia ??

en esta tabla puedo llegar a tener miles o millones de registros, y necesito generar grupos...
identificando varios registros con un numero.

el unico dato fijo que puedo dejar es la cantidad de registros por grupo.
por ejemplo cada 100 registros asignar un numero a todos esos.

saludos!
  #4 (permalink)  
Antiguo 15/06/2011, 15:13
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Update!

claro el criterio para usarlo grupos dependeria de como manejes tus indices en el filtro y esto te facilitaria los trabajos con los Transact-SQL.
  #5 (permalink)  
Antiguo 15/06/2011, 15:14
Avatar de Flakiss  
Fecha de Ingreso: septiembre-2009
Mensajes: 113
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Update!

y tu seria tan amable de orientarme de como debiese ser esa query??
  #6 (permalink)  
Antiguo 15/06/2011, 15:33
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Update!

Tambien depende de la version, ya que 2005 y 2008, podria utilizar CTE o bien hacer un ETL, para realizar dicha operacion.
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 15/06/2011, 15:35
Avatar de Flakiss  
Fecha de Ingreso: septiembre-2009
Mensajes: 113
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Update!

estoy usando DTSX
  #8 (permalink)  
Antiguo 15/06/2011, 15:55
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Update!

AQUI TENGO UNA CONSULTA,
A VER SI TE AYUDO... EN ORACLE EL ROWNUM, creo que es el RowCount en SQL no recuerdo

SELECT ROWNUM, (SUBSTR(SUBSTR(TO_CHAR('0'||ROWNUM),-2),1,1)+1) ESTADO, COLUMNA1, COLUMNA2...
FROM TABLA

intentalo en una tabla de miles de registros y dime si es lo que quieres :D

Saludos,

Rommel León
__________________
Odio verte ir, pero me encanta verte yendo :)
  #9 (permalink)  
Antiguo 15/06/2011, 16:30
 
Fecha de Ingreso: abril-2010
Ubicación: Lima-Peru
Mensajes: 96
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: Update!

hola Disculpa por la demora es que recien llego del trabajo bueno haber prueba esto.
Código:
declare @x int,@Result varchar(100)
set @Result = 'Error';
set @x=2;
select * into #TABLA from TU_TABLA
if @x < select COUNT(*) from #TABLA
	BEGIN 
		update #TABLA set ESTADO= 0
			where CAMPO_INDEX in (select top(@x) ROW_NUMBER() over(order by CAMPO_INDEX desc) from #TABLA)
	END
		ELSE
			print @Result

drop  table #TABLA
no tengo el sql para probarlo , pero te da una idea de lo que necesitas. saludos

Última edición por Erick21; 15/06/2011 a las 16:35
  #10 (permalink)  
Antiguo 16/06/2011, 09:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 9 meses
Puntos: 447
Respuesta: Update!

Hola Flakiss:

No sé si entendí correctamente lo que quieres hacer, pero creo que sería algo más o menos así, supongamos que tienes la siguiente tabla

Código:
id          nombre     grupo
----------- ---------- -----------
1           uno        NULL
2           dos        NULL
3           tres       NULL
4           cuatro     NULL
5           cinco      NULL
6           seis       NULL
7           siete      NULL
8           ocho       NULL
9           nueve      NULL
10          diez       NULL
11          once       NULL
12          doce       NULL
Ahora supongamos que queremos hacer grupos de 3 elementos, es decir, hacer algo como esto:

Código:
id          nombre     grupo
----------- ---------- -----------
1           uno        1
2           dos        1
3           tres       1
4           cuatro     2
5           cinco      2
6           seis       2
7           siete      3
8           ocho       3
9           nueve      3
10          diez       4
11          once       4
12          doce       4
Hay una forma de hacer esto en una sola línea de código, sería más o menos así:

Código SQL:
Ver original
  1. DECLARE @Tabla TABLE (id INT, nombre VARCHAR(10), grupo INT)
  2. INSERT INTO @Tabla VALUES (1, 'uno', NULL)
  3. INSERT INTO @Tabla VALUES (2, 'dos', NULL)
  4. INSERT INTO @Tabla VALUES (3, 'tres', NULL)
  5. INSERT INTO @Tabla VALUES (4, 'cuatro', NULL)
  6. INSERT INTO @Tabla VALUES (5, 'cinco', NULL)
  7. INSERT INTO @Tabla VALUES (6, 'seis', NULL)
  8. INSERT INTO @Tabla VALUES (7, 'siete', NULL)
  9. INSERT INTO @Tabla VALUES (8, 'ocho', NULL)
  10. INSERT INTO @Tabla VALUES (9, 'nueve', NULL)
  11. INSERT INTO @Tabla VALUES (10,'diez', NULL)
  12. INSERT INTO @Tabla VALUES (11,'once', NULL)
  13. INSERT INTO @Tabla VALUES (12,'doce', NULL)
  14. SELECT * FROM @Tabla
  15.  
  16. DECLARE @indice INT;
  17. SET @indice = 0
  18. DECLARE @total INT;
  19. SET @total = 0
  20.  
  21. UPDATE @Tabla SET @indice = grupo = CASE WHEN @total % 3 = 0 THEN @indice + 1 ELSE @indice END, @total = @total + 1
  22.                
  23. SELECT * FROM @Tabla

El truco está en el update, ahí puedes hacer asignación de campos y al mismo tiempo actualizar las variables que estás utilizando. Creo que esto sería más o menos lo que quieres hacer. Haz la prueba para ver si te sirve y si tienes alguna duda lo comentas en el foro.

Saludos
Leo.
  #11 (permalink)  
Antiguo 23/06/2011, 12:31
Avatar de Flakiss  
Fecha de Ingreso: septiembre-2009
Mensajes: 113
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Update!

HOla!!

Muchas gracias a todos los que aportaron con sus ideas,
ya lo resolvi con el update y una variable auxiliar :D
y es la misma idea de leonardo_josue
ejejejeje

Gracias!!

Etiquetas: update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:56.