Reasignar valores consecutivos a una columna

25/10/2006 - 22:09 por Federico Ezequiel | Informe spam
Listeros:

Como ejercicio de autoaprendizaje me propuse resolver el siguiente problema:
tengo una tabla con la primer columna int y la otra varchar.
No importa que coloco en la columna varchar. La tabla tampoco tiene ningún
tipo de constraint.
La cuestión es que incorporo valores a la columna int que son siempre
ascendentes pero no necesariamente consecutivos (por ej.: 4,8,9,12)
Al eliminar filas de la tabla, se activa un trigger que hace un update sobre
la columna int de manera que quede con valores ascendentes y comenzando por
1.
Un ejemplo concreto:
4, 'cuatro'
8, 'ocho'
9, 'nueve'
12, 'doce'

El delete elimina la fila del 8 y del 12, de manera que el trigger tiene que
dejarme esto en la tabla:

1, 'cuatro'
2, 'nueve'

No le busquen una aplicación al ejercicio por que tal vez no la tenga, pero
me sirve para aprender.
Yo resolví el problema y construí un trigger que hace esto. Pero mi pregunta
es si existe algún modo en SQL Server de ir pasando de fila en fila para
asignar a la columna int los valores 1, 2, 3, etc.
A mi se me ocurrió que podrían servirme los cursores, pero realmente no sé
si es así y necesito ver otras posibilidades.
Muchas gracias.

Federico

Preguntas similare

Leer las respuestas

#1 Federico Ezequiel
25/10/2006 - 23:23 | Informe spam
Tema resuelto.
Efectivamente, con cursores todo era más fácil.

Federico

"Federico Ezequiel" escribió en el mensaje
news:u1CkpFH%
Listeros:

Como ejercicio de autoaprendizaje me propuse resolver el siguiente
problema:
tengo una tabla con la primer columna int y la otra varchar.
No importa que coloco en la columna varchar. La tabla tampoco tiene ningún
tipo de constraint.
La cuestión es que incorporo valores a la columna int que son siempre
ascendentes pero no necesariamente consecutivos (por ej.: 4,8,9,12)
Al eliminar filas de la tabla, se activa un trigger que hace un update
sobre la columna int de manera que quede con valores ascendentes y
comenzando por 1.
Un ejemplo concreto:
4, 'cuatro'
8, 'ocho'
9, 'nueve'
12, 'doce'

El delete elimina la fila del 8 y del 12, de manera que el trigger tiene
que dejarme esto en la tabla:

1, 'cuatro'
2, 'nueve'

No le busquen una aplicación al ejercicio por que tal vez no la tenga,
pero me sirve para aprender.
Yo resolví el problema y construí un trigger que hace esto. Pero mi
pregunta es si existe algún modo en SQL Server de ir pasando de fila en
fila para asignar a la columna int los valores 1, 2, 3, etc.
A mi se me ocurrió que podrían servirme los cursores, pero realmente no sé
si es así y necesito ver otras posibilidades.
Muchas gracias.

Federico

Respuesta Responder a este mensaje
#2 Alejandro Mesa
26/10/2006 - 14:31 | Informe spam
Trata:

update dbo.t1
set c1 = (select count(*) from dbo.t1 as t2 where t2.c1 <= dbo.t1.c1)


AMB


"Federico Ezequiel" wrote:

Tema resuelto.
Efectivamente, con cursores todo era más fácil.

Federico

"Federico Ezequiel" escribió en el mensaje
news:u1CkpFH%
> Listeros:
>
> Como ejercicio de autoaprendizaje me propuse resolver el siguiente
> problema:
> tengo una tabla con la primer columna int y la otra varchar.
> No importa que coloco en la columna varchar. La tabla tampoco tiene ningún
> tipo de constraint.
> La cuestión es que incorporo valores a la columna int que son siempre
> ascendentes pero no necesariamente consecutivos (por ej.: 4,8,9,12)
> Al eliminar filas de la tabla, se activa un trigger que hace un update
> sobre la columna int de manera que quede con valores ascendentes y
> comenzando por 1.
> Un ejemplo concreto:
> 4, 'cuatro'
> 8, 'ocho'
> 9, 'nueve'
> 12, 'doce'
>
> El delete elimina la fila del 8 y del 12, de manera que el trigger tiene
> que dejarme esto en la tabla:
>
> 1, 'cuatro'
> 2, 'nueve'
>
> No le busquen una aplicación al ejercicio por que tal vez no la tenga,
> pero me sirve para aprender.
> Yo resolví el problema y construí un trigger que hace esto. Pero mi
> pregunta es si existe algún modo en SQL Server de ir pasando de fila en
> fila para asignar a la columna int los valores 1, 2, 3, etc.
> A mi se me ocurrió que podrían servirme los cursores, pero realmente no sé
> si es así y necesito ver otras posibilidades.
> Muchas gracias.
>
> Federico
>



Respuesta Responder a este mensaje
#3 hombre-chango
26/06/2013 - 00:16 | Informe spam
Federico Ezequiel escribió el 25/10/2006 22:09 :
Listeros:

Como ejercicio de autoaprendizaje me propuse resolver el siguiente problema:
tengo una tabla con la primer columna int y la otra varchar.
No importa que coloco en la columna varchar. La tabla tampoco tiene
ningún
tipo de constraint.
La cuestión es que incorporo valores a la columna int que son siempre
ascendentes pero no necesariamente consecutivos (por ej.: 4,8,9,12)
Al eliminar filas de la tabla, se activa un trigger que hace un update sobre
la columna int de manera que quede con valores ascendentes y comenzando por
1.
Un ejemplo concreto:
4, 'cuatro'
8, 'ocho'
9, 'nueve'
12, 'doce'

El delete elimina la fila del 8 y del 12, de manera que el trigger tiene que
dejarme esto en la tabla:

1, 'cuatro'
2, 'nueve'

No le busquen una aplicación al ejercicio por que tal vez no la tenga,
pero
me sirve para aprender.
Yo resolví el problema y construí un trigger que hace esto. Pero
mi pregunta
es si existe algún modo en SQL Server de ir pasando de fila en fila para
asignar a la columna int los valores 1, 2, 3, etc.
A mi se me ocurrió que podrían servirme los cursores, pero
realmente no sé
si es así y necesito ver otras posibilidades.
Muchas gracias.

Federico


¡ Hola ! amigo estoy muy interezado en el trigger que hablas puesto necesito reordenar los valores cada ves que elimino un registro que no es consecutivo, serias tan amable de ayudarme al respecto, estoy programando en visual studio 2010
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida