Generar un Consecutivo

27/07/2004 - 01:07 por Miguel Jiron | Informe spam
Hola a todos !!!

Mi problema es que cada mes se le agregan a una tabla al
rededor de 400,000 registros en un solo proceso. Luego en
un campo necesito generar un numero consecutivo cuando
estos registros ya estan grabados en la tabla...

Ya hice un Procedimiento Almacenado que genera el
consecutivo con un Cursor, pero como se imaginaran, este
cursor se dilata excesivamente para generar y actualizar
todos los consecutivos en la tabla, ademas todo el mundo
recomienda tratar de no utilizar cursores porque
perjudican el rendimiento del servidor, y este es mi caso.

Como puedo generar un consecutivo sin utilizar un
cursor ??

Gracias...

Preguntas similare

Leer las respuestas

#1 MAXI
27/07/2004 - 01:18 | Informe spam
hola, has probado de tener un campo identity en esa tabla?




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Miguel Jiron" escribió en el mensaje
news:486d01c47365$5e55d0f0$
Hola a todos !!!

Mi problema es que cada mes se le agregan a una tabla al
rededor de 400,000 registros en un solo proceso. Luego en
un campo necesito generar un numero consecutivo cuando
estos registros ya estan grabados en la tabla...

Ya hice un Procedimiento Almacenado que genera el
consecutivo con un Cursor, pero como se imaginaran, este
cursor se dilata excesivamente para generar y actualizar
todos los consecutivos en la tabla, ademas todo el mundo
recomienda tratar de no utilizar cursores porque
perjudican el rendimiento del servidor, y este es mi caso.

Como puedo generar un consecutivo sin utilizar un
cursor ??

Gracias...
Respuesta Responder a este mensaje
#2 Miguel Jiron
27/07/2004 - 01:29 | Informe spam
Fijate que el campo Identity no me serviria por que a ese
consecutivo luego tengo que concatenarle un digito
verificador... asi que no me resultaria... necesitaria
otra solucion... no se te ocurre otra ??

Gracias

hola, has probado de tener un campo identity en esa


tabla?




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Miguel Jiron" escribió en el


mensaje
news:486d01c47365$5e55d0f0$
Hola a todos !!!

Mi problema es que cada mes se le agregan a una tabla




al
rededor de 400,000 registros en un solo proceso. Luego




en
un campo necesito generar un numero consecutivo cuando
estos registros ya estan grabados en la tabla...

Ya hice un Procedimiento Almacenado que genera el
consecutivo con un Cursor, pero como se imaginaran,




este
cursor se dilata excesivamente para generar y




actualizar
todos los consecutivos en la tabla, ademas todo el




mundo
recomienda tratar de no utilizar cursores porque
perjudican el rendimiento del servidor, y este es mi




caso.

Como puedo generar un consecutivo sin utilizar un
cursor ??

Gracias...




.

Respuesta Responder a este mensaje
#3 Isaías
27/07/2004 - 01:35 | Informe spam
Si unicamente va a GUARDAR información y no la va a BORRAR
(DELETE), entonces declare la columna del consecutivo como
IDENTITY.

Saludos
Respuesta Responder a este mensaje
#4 MAXI
27/07/2004 - 01:37 | Informe spam
Hola, si el consecutivo tiene una secuencia no se me ocurre otra opcion de
forma eficiente y que funcione con el DTS :(

Pero de todas formas si a ese consecutivo le agregas un campo mas cual es el
problema? podrias tener en ese caso 2 campos

1) el identity
2) el final, al cual le agregas lo que quieres, solo usamos el identity para
que vos no debas generar un proceso que vaya a buscar a una tabla el ultimo
valor y le incremente 1.

Otra opcion para lo que buscas no se me ocurre :(




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Miguel Jiron" escribió en el mensaje
news:488f01c47368$6ba401c0$
Fijate que el campo Identity no me serviria por que a ese
consecutivo luego tengo que concatenarle un digito
verificador... asi que no me resultaria... necesitaria
otra solucion... no se te ocurre otra ??

Gracias

hola, has probado de tener un campo identity en esa


tabla?




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messager:


"Miguel Jiron" escribió en el


mensaje
news:486d01c47365$5e55d0f0$
Hola a todos !!!

Mi problema es que cada mes se le agregan a una tabla




al
rededor de 400,000 registros en un solo proceso. Luego




en
un campo necesito generar un numero consecutivo cuando
estos registros ya estan grabados en la tabla...

Ya hice un Procedimiento Almacenado que genera el
consecutivo con un Cursor, pero como se imaginaran,




este
cursor se dilata excesivamente para generar y




actualizar
todos los consecutivos en la tabla, ademas todo el




mundo
recomienda tratar de no utilizar cursores porque
perjudican el rendimiento del servidor, y este es mi




caso.

Como puedo generar un consecutivo sin utilizar un
cursor ??

Gracias...




.

Respuesta Responder a este mensaje
#5 Javier Loria
27/07/2004 - 03:01 | Informe spam
Hola Miguel:
Los datos tienen alguna Llave Primaria Natural?
Si los tienes es posible hacerlo con una FUNCION IDENTITY (no con la
propiedad), y con una Tabla Temporal.
Seria mas o menos asi:
= SELECT Identity(INT, 1,1) AS Id
, LlavePrimaria
INTO #Ids
FROM Tabla

UPDATE Tabla
SET NumeroConsecutivo=I.Id
FROM Tabla
JOIN #Ids AS I
ON Tabla.Id=I.Id

DROP TABLE #Ids
= El mecanismo del COUNT(*) que seria otra alternativa seria demasiado
lento con 400,000 mil registros. Este me parece que debe ser el mas rapido.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


Miguel Jiron escribio:
Hola a todos !!!

Mi problema es que cada mes se le agregan a una tabla al
rededor de 400,000 registros en un solo proceso. Luego en
un campo necesito generar un numero consecutivo cuando
estos registros ya estan grabados en la tabla...

Ya hice un Procedimiento Almacenado que genera el
consecutivo con un Cursor, pero como se imaginaran, este
cursor se dilata excesivamente para generar y actualizar
todos los consecutivos en la tabla, ademas todo el mundo
recomienda tratar de no utilizar cursores porque
perjudican el rendimiento del servidor, y este es mi caso.

Como puedo generar un consecutivo sin utilizar un
cursor ??

Gracias...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida