Otra de Renumerar

21/12/2007 - 21:47 por JOMIJIMO | Informe spam
Buenas noches a todos/as:

Como otras tantas veces os solicito ayuda porque estoy seguro de que
me la podreis proporcionar.

Tengo una tabla de Movimientos (200.000 registros aprox. actualmente)
con un campo denominado "NumeroDeOrden" que necesito renumerar
periodicamente comenzando desde 1 (uno).

Pero, y aqui viene el pero, esta renumeracion debe hacerse estando la
tabla ordenada por los siguientes campos:

1º por el campo FechaMvto
2º por el campo TipoMvto
3º por el campo NumeroLote

Lo he intenado con varias soluciones que he encontrado buscando en el
foro pero no consigo adaptarlas a lo que necesito.

Aunque el indice clustered que tiene la tabla no lo componen estos
campos, tambien lo cambié para probar otras de las soluciones que he
encontrado, pero no consigo que me los renumere correctamente. Aun así
el indice clustered lo he devuelto a su estado original, ya que lo
necesito para otros menesteres.

Os ruego que me echeis una mano para ver si puedo solucionar este
asunto, ya que actualmente lo estoy haciendo atraves de la aplicacion
cliente porque no he encontrado otra solucion llegando a tardar el
proceso hasta 20 minutos.

Muchas gracias por vuestra ayuda.

Links de referencia

http://groups.google.es/group/micro...&fwc=2

http://groups.google.es/group/micro...57898b455a

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
23/12/2007 - 18:09 | Informe spam
Hola,

On 21 dec, 21:47, JOMIJIMO wrote:
Buenas noches a todos/as:

Como otras tantas veces os solicito ayuda porque estoy seguro de que
me la podreis proporcionar.

Tengo una tabla de Movimientos (200.000 registros aprox. actualmente)
con un campo denominado "NumeroDeOrden" que necesito renumerar
periodicamente comenzando desde 1 (uno).

Pero, y aqui viene el pero, esta renumeracion debe hacerse estando la
tabla ordenada por los siguientes campos:

1º por el campo FechaMvto
2º por el campo TipoMvto
3º por el campo NumeroLote

Lo he intenado con varias soluciones que he encontrado buscando en el
foro pero no consigo adaptarlas a lo que necesito.

Aunque el indice clustered que tiene la tabla no lo componen estos
campos, tambien lo cambié para probar otras de las soluciones que he
encontrado, pero no consigo que me los renumere correctamente. Aun así
el indice clustered lo he devuelto a su estado original, ya que lo
necesito para otros menesteres.

Os ruego que me echeis una mano para ver si puedo solucionar este
asunto, ya que actualmente lo estoy haciendo atraves de la aplicacion
cliente porque no he encontrado otra solucion llegando a tardar el
proceso hasta 20 minutos.

Muchas gracias por vuestra ayuda.

Links de referencia

http://groups.google.es/group/micro...owse_th...

http://groups.google.es/group/micro...owse_th...



Y qué problemas tienes utilizando un índice clustered?
Prueba lo siguiente:

Asegurate de que tienes un índice clustered sobre
{FechaMvto, TipoMvto, NumeroLote}.

alter table Movimientos
drop column NumeroDeOrden

alter table Movimientos
add NumeroDeOrden int identity(1,1)

alter table mvto
alter column NumeroDeOrden int

Ahora puedes poner otra vez tu índice clustered original.

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
23/12/2007 - 18:15 | Informe spam
On 23 dec, 18:09, "Carlos M. Calvelo" wrote:

alter table mvto
  alter column NumeroDeOrden int



Aquí tiene que ser la tabla Movimientos claro, no mvto.

alter table Movimientos
alter column NumeroDeOrden int

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 Carlos M. Calvelo
24/12/2007 - 11:17 | Informe spam

alter table mvto
  alter column NumeroDeOrden int




Acabo de darme cuenta... esto no funciona!
Espero que con lo demás sea suficiente.

Saludos,
Carlos
Respuesta Responder a este mensaje
#9 JOMIJIMO
25/12/2007 - 18:16 | Informe spam
Muchas Gracias a todos por responder.

Carlos, como ya comenté antes, ya había probado lo del indice
clustered. Aunque en todos los post que he leido me aconsejan usar esa
tecnica u otra parecida, como es tu caso, no se porque extraña razon
que no llego a comprender no me funciona. Incluso he probado a borrar
todos los indices de la tabla y volver a crearlos comenzando por el
indice clustered, pero ni aun así me funciona.

La tecnica que me indica Maxi Accotto, lo que hace es crear una nueva
colunma en un SP con un numero correlativo, pero eso no me sirve ya
que necesito que el dato quede grabado en el campo NumeroDeOrden y
dicha tecnica no lo hace.

Sigo a la espera de alguna otra aportacion y por mi parte tambien
seguiré investigando, pero os ruego vuestra colaboracion.
Respuesta Responder a este mensaje
#10 Jesús López
26/12/2007 - 13:44 | Informe spam
No dices cual es la clave primaria de la tabla Movimientos ni tampoco dices
si la combinación de los campos FechaMvto, TipoMvto y NumeroLote es única.

Así que voy a suponer que la clave primaria de la tabla Movimientos es un
autonumérico entero llamado IdMovimiento.

Una solución al problema es tener una tabla auxiliar llamada
OrdenMovimientos, donde tenemos el NumeroDeOrden, en vez de tener
NumeroDeOrden en la tabla Movimientos:

CREATE TABLE OrdenMovimientos
(
NumeroDeOrden int IDENTITY(1,1) PRIMARY KEY,
IdMovimiento int UNIQUE
)

Esta tabla OrdenMovimientos la regeneras periódicamente con ese código:

TRUNCATE TABLE OrdenMovimientos

INSERT INTO OrdenMovimientos(IdMovimiento)
SELECT IdMovimiento
FROM Movimientos
ORDER BY FechaMvto, TipoMvto, NumeroLote

Luego para sacar consultas que incluyan el NumeroDeOrden haces un JOIN entre
las tablas:

SELECT M.*, O.NumeroDeOrden
FROM Movimientos M INNER JOIN OrdenMovimientos O ON M.IdMovimiento =
O.IdMovimiento
WHERE <criterio de búsqueda>

Esta técnica no es la más eficiente posible, pero está totalmente
garantizado que va a funcionar. La técnica más eficiente sería la que
planteaba Miguel Egea en uno de los links de referencia que habías puesto.

Saludos:

Jesús López
www.solidq.com



"JOMIJIMO" escribió en el mensaje
news:
Buenas noches a todos/as:

Como otras tantas veces os solicito ayuda porque estoy seguro de que
me la podreis proporcionar.

Tengo una tabla de Movimientos (200.000 registros aprox. actualmente)
con un campo denominado "NumeroDeOrden" que necesito renumerar
periodicamente comenzando desde 1 (uno).

Pero, y aqui viene el pero, esta renumeracion debe hacerse estando la
tabla ordenada por los siguientes campos:

1º por el campo FechaMvto
2º por el campo TipoMvto
3º por el campo NumeroLote

Lo he intenado con varias soluciones que he encontrado buscando en el
foro pero no consigo adaptarlas a lo que necesito.

Aunque el indice clustered que tiene la tabla no lo componen estos
campos, tambien lo cambié para probar otras de las soluciones que he
encontrado, pero no consigo que me los renumere correctamente. Aun así
el indice clustered lo he devuelto a su estado original, ya que lo
necesito para otros menesteres.

Os ruego que me echeis una mano para ver si puedo solucionar este
asunto, ya que actualmente lo estoy haciendo atraves de la aplicacion
cliente porque no he encontrado otra solucion llegando a tardar el
proceso hasta 20 minutos.

Muchas gracias por vuestra ayuda.

Links de referencia

http://groups.google.es/group/micro...&fwc=2

http://groups.google.es/group/micro...57898b455a
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida