indice numerico personal sin huecos

21/05/2004 - 23:42 por joselitux | Informe spam
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco en el
grupo, es decir, los comerciales se numeran correlativamente y no puede
ocurrir que los comerciales se numeren por ejemplo así: 1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva el
identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

Gracias

Preguntas similare

Leer las respuestas

#1 Javier Loria
22/05/2004 - 06:20 | Informe spam
Hola:
Entonces no se puede usar identity, pero puedes usar un par de
mecanismos.
=SELECT MAX(Identity)+1
FROM Tabla
WHERE GRUPO='Comercial'
joselitux escribio:
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco
en el grupo, es decir, los comerciales se numeran correlativamente y
no puede ocurrir que los comerciales se numeren por ejemplo así:
1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva
el identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

Gracias
Respuesta Responder a este mensaje
#2 Javier Loria
22/05/2004 - 06:28 | Informe spam
Hola:
Entonces no se puede usar identity, pero puedes usar un par de
mecanismos mas o menos conocidos.
En la opcion 1, simplemente obtienes el mayor de cada grupo y le sumas 1. En
la opcion 2 crear una tabla (TomaUnNumero) y la actualizas sumandole 1 y
pasando la variable para luego insertar.

=SELECT @Valor=COALESCE(MAX(Identity),0)+1
FROM Tabla
WHERE GRUPO='Comercial'
= Este da el siguiente numero consecutivo para cada grupo.
=-- Opcion 2
UPDATE TomaUnNumero
SET Valor=@Valor=Valor+1
WHERE Tipo=Comercial
= Por ultimo podria ocurrer que cuando se borren filas queden "huecos" si
lo que quieres es llenar estos es un poco mas dificil.
No conozco tu aplicacion pero es muy mal sintoma disenar una BD con
estos requerimientos, las BD son acerca de conjuntos de datos, lo cual los
hace NO ordenados e independientes unos de los otros como entidades. Si nos
comentas sobre la razones que te llevaron a decidirte por estos
requerimientos, tal vez te podamos ayudar.

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.
joselitux escribio:
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco
en el grupo, es decir, los comerciales se numeran correlativamente y
no puede ocurrir que los comerciales se numeren por ejemplo así:
1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva
el identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

Gracias
Respuesta Responder a este mensaje
#3 joselitux
22/05/2004 - 21:19 | Informe spam
Bueno, pues lo hice así porque en realidad hay como unas 50 categorias
diferentes (no solo comerciales y directivos) y no me pareció correcto
hacer una tabla por cada categoría.


n Fri, 21 May 2004 22:20:26 -0600, Javier Loria wrote:

Hola:
Entonces no se puede usar identity, pero puedes usar un par de
mecanismos.
=> SELECT MAX(Identity)+1
FROM Tabla
WHERE GRUPO='Comercial'
joselitux escribio:
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco
en el grupo, es decir, los comerciales se numeran correlativamente y
no puede ocurrir que los comerciales se numeren por ejemplo así:
1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva
el identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

Gracias
Respuesta Responder a este mensaje
#4 Maxi
22/05/2004 - 23:49 | Informe spam
Hola, primero que no es ninguna buena ida usar autoincrementales para claves
de usuario!!

Antes de Seguir te invito a leerte este articulo del amigo Carlos Sacristan.

http://www.configuracionesintegrale...p?articulo!9

Luego de haberlo leido te comento como lo hago yo :p

Yo tengo una tabla llamada Next_number donde la estructura es:

Tabla
Campo
Prefijo
Sufijo
Proximo numero

Bien un ejemplo de Datos seria.

Facturas
id
A

100

Bien luego tengo mis stores de CRUD (Create Read Update Delete) donde lo que
hago es algo asi como

CREATE PROC MISTORE @MISVARIABLES AS

DECLARE @PROXIMO INT

BEGIN TRAN

SELECT @PROXIMO = [PROXIMO NUMERO] FROM NEXT_NUMBER WHERE TABLA='FACTURA'

INSERT INTO FACTURAS (ID,CAMPOS)
VALUES (@PROXIMO,@VARIABLES)

UPDATE NEXT_NUMBER SET [PROXIMO_NUMERO]=[PROXIMO_NUMERO]+1
WHERE TABLA='FACTURA'

COMMIT TRAN



Aclaro que esto es como ejemplo, vos deberias adaptarlo a tu modelo!! pero
de esta forma yo mantengo los ID de mas de 500 tablas sin problemas, no se
generan agujeros, ni errores ni nada!!!

Pd: se podria reemplazar el primero Select y ponerlo todo dentro del INSERT,
yo solo te lo muestro asi porque no se si sabes usar INSERT con SELECT al
mismo tiempo.

Bye y espero te sea util.




Salu2

Maxi

Desarrollador 3 estrellas .NET
Buenos Aires - Argentina

MSN:

"joselitux" escribió en el mensaje
news:
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco en el
grupo, es decir, los comerciales se numeran correlativamente y no puede
ocurrir que los comerciales se numeren por ejemplo así: 1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva el
identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

Gracias
Respuesta Responder a este mensaje
#5 joselitux
23/05/2004 - 12:47 | Informe spam
Me parece que no me expresé bien.

Mi problema no es cómo generar el número sino que teninedo ya la table
llena tengo que detectar los huecos que ha dejado la aplicación.

Necesito saber dónde están esos huecos para rellenarlos. El identity me
da igual, me preocupa el numero de orden de cada usuario dentro del grupo.


n Sat,
22 May 2004 21:19:17 +0200, joselitux wrote:

Bueno, pues lo hice así porque en realidad hay como unas 50 categorias
diferentes (no solo comerciales y directivos) y no me pareció correcto
hacer una tabla por cada categoría.


n Fri, 21 May 2004 22:20:26 -0600, Javier Loria wrote:

Hola:
Entonces no se puede usar identity, pero puedes usar un par de
mecanismos.
=>> SELECT MAX(Identity)+1
FROM Tabla
WHERE GRUPO='Comercial'
joselitux escribio:
Hola

¿cual seria la forma más adecuada de programar en T-SQL algo que
verifique que en mi índice ordinal no existan huecos
dentro de los diferentes grupos de registros?

Me explico:

Imaginen esta tabla

IDENTITY NOMBRE ORDEN GRUPO
1 Pedro 1 comercial
2 Juan 2 comercial
3 Luis 3 comercial
4 Ana 4 comercial
5 Juana 1 directivo
6 Jose 2 directivo
7 Eva 3 directivo


Una de las normas de mi aplicación es que no puede existir un hueco
en el grupo, es decir, los comerciales se numeran correlativamente y
no puede ocurrir que los comerciales se numeren por ejemplo así:
1,2,4.

Lo que busco es programar un procedimiento almacenado que me devuelva
el identity de todos los registros en los que detecte que hay un salto
en el ordinal DENTRO DE UN GRUPO.

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