reordenar registro numérico sin huecos

07/07/2006 - 09:21 por ***Joselitux*** | Informe spam
Hola

Tengo una tabla que almacena pedidos y además de un número único de pedido
tengo un número ordinal que no puede dejar huecos. Pero claro, si el cliente
cancela un pedido queda un hueco. Quiero renumerar ese número con un SQL en
vez de hacerlo por código, si es posible sin un cursor.

Ejemplo

CLIENTE ORDINAL_pedido
manolo 1
manolo 2
juan 1
juan 2
manolo 3
pedro 1
pedro 2
juan 3
manolo 4

Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que quiero es
que los pedidos de manolo se renumeren y queden sin huecos.

algún consejo?


Gracias mil

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
07/07/2006 - 11:10 | Informe spam
No te recomiendo hacer esa operación. La clave primaria debe ser un
código interno sin más valor que el de identificar unívocamente el registro
en la base de datos; entiendo que si para la aplicación cliente tiene otro
significado hay algo erróneo.

Además está el problema de posibles tablas dependientes dela de pedidos,
en este caso. Habría que reorganizarlas también, con lo que la complejidad
del proceso aumenta.

Así que la pregunta es: ¿por qué necesitas que no existan huecos?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"***Joselitux***" escribió en el mensaje
news:

Hola

Tengo una tabla que almacena pedidos y además de un número único de pedido
tengo un número ordinal que no puede dejar huecos. Pero claro, si el


cliente
cancela un pedido queda un hueco. Quiero renumerar ese número con un SQL


en
vez de hacerlo por código, si es posible sin un cursor.

Ejemplo

CLIENTE ORDINAL_pedido
manolo 1
manolo 2
juan 1
juan 2
manolo 3
pedro 1
pedro 2
juan 3
manolo 4

Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que quiero


es
que los pedidos de manolo se renumeren y queden sin huecos.

algún consejo?


Gracias mil


Respuesta Responder a este mensaje
#2 ***Joselitux***
07/07/2006 - 13:31 | Informe spam
No hay problema con eso porque el registro está unívocamente identificado
gracias a un ID autonumérico que hace de IDENTITY.
El problema es que cada cliente debe tener pedidos ordenados sin huecos
porque es un requerimiento del software.



"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:%
No te recomiendo hacer esa operación. La clave primaria debe ser un
código interno sin más valor que el de identificar unívocamente el
registro
en la base de datos; entiendo que si para la aplicación cliente tiene otro
significado hay algo erróneo.

Además está el problema de posibles tablas dependientes dela de
pedidos,
en este caso. Habría que reorganizarlas también, con lo que la complejidad
del proceso aumenta.

Así que la pregunta es: ¿por qué necesitas que no existan huecos?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"***Joselitux***" escribió en el mensaje
news:

Hola

Tengo una tabla que almacena pedidos y además de un número único de
pedido
tengo un número ordinal que no puede dejar huecos. Pero claro, si el


cliente
cancela un pedido queda un hueco. Quiero renumerar ese número con un SQL


en
vez de hacerlo por código, si es posible sin un cursor.

Ejemplo

CLIENTE ORDINAL_pedido
manolo 1
manolo 2
juan 1
juan 2
manolo 3
pedro 1
pedro 2
juan 3
manolo 4

Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que quiero


es
que los pedidos de manolo se renumeren y queden sin huecos.

algún consejo?


Gracias mil






Respuesta Responder a este mensaje
#3 Carlos Sacristán
07/07/2006 - 13:47 | Informe spam
Yo lo devolvería como un campo calculado dentro de una vista o de un
procedimiento almacenado...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"***Joselitux***" escribió en el mensaje
news:
No hay problema con eso porque el registro está unívocamente identificado
gracias a un ID autonumérico que hace de IDENTITY.
El problema es que cada cliente debe tener pedidos ordenados sin huecos
porque es un requerimiento del software.



"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:%
> No te recomiendo hacer esa operación. La clave primaria debe ser un
> código interno sin más valor que el de identificar unívocamente el
> registro
> en la base de datos; entiendo que si para la aplicación cliente tiene


otro
> significado hay algo erróneo.
>
> Además está el problema de posibles tablas dependientes dela de
> pedidos,
> en este caso. Habría que reorganizarlas también, con lo que la


complejidad
> del proceso aumenta.
>
> Así que la pregunta es: ¿por qué necesitas que no existan huecos?
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "***Joselitux***" escribió en el mensaje
> news:
>>
>> Hola
>>
>> Tengo una tabla que almacena pedidos y además de un número único de
>> pedido
>> tengo un número ordinal que no puede dejar huecos. Pero claro, si el
> cliente
>> cancela un pedido queda un hueco. Quiero renumerar ese número con un


SQL
> en
>> vez de hacerlo por código, si es posible sin un cursor.
>>
>> Ejemplo
>>
>> CLIENTE ORDINAL_pedido
>> manolo 1
>> manolo 2
>> juan 1
>> juan 2
>> manolo 3
>> pedro 1
>> pedro 2
>> juan 3
>> manolo 4
>>
>> Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que


quiero
> es
>> que los pedidos de manolo se renumeren y queden sin huecos.
>>
>> algún consejo?
>>
>>
>> Gracias mil
>>
>>
>
>


Respuesta Responder a este mensaje
#4 Maxi
07/07/2006 - 14:10 | Informe spam
Hola, esto sucede porque estas usando identities y no es recomendado para
estas cosas:

Te paso un ejemplo de como podes numerar sin identities

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"***Joselitux***" escribió en el mensaje
news:

Hola

Tengo una tabla que almacena pedidos y además de un número único de pedido
tengo un número ordinal que no puede dejar huecos. Pero claro, si el
cliente cancela un pedido queda un hueco. Quiero renumerar ese número con
un SQL en vez de hacerlo por código, si es posible sin un cursor.

Ejemplo

CLIENTE ORDINAL_pedido
manolo 1
manolo 2
juan 1
juan 2
manolo 3
pedro 1
pedro 2
juan 3
manolo 4

Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que quiero
es que los pedidos de manolo se renumeren y queden sin huecos.

algún consejo?


Gracias mil

Respuesta Responder a este mensaje
#5 Alejandro Mesa
07/07/2006 - 14:15 | Informe spam
Trata:

Asumire que la clave primaria (en este caso el identity que mencionastes) se
llama pk.

create trigger tr_pedido_upd on dbo.pedido
for delete
as

update dbo.pedido
set ORDINAL_pedido = (
select count(*)
from dbo.pedido as a
where a.cliente = dbo.pedido.cliente and a.pk <= dbo.pedido.pk
)
where exists (select * from deleted as d where d.cliente = dbo.pedido.cliente)
go


AMB

"***Joselitux***" wrote:


Hola

Tengo una tabla que almacena pedidos y además de un número único de pedido
tengo un número ordinal que no puede dejar huecos. Pero claro, si el cliente
cancela un pedido queda un hueco. Quiero renumerar ese número con un SQL en
vez de hacerlo por código, si es posible sin un cursor.

Ejemplo

CLIENTE ORDINAL_pedido
manolo 1
manolo 2
juan 1
juan 2
manolo 3
pedro 1
pedro 2
juan 3
manolo 4

Si Manolo elimina su pedido 3 habría un salto del 2 al 4 y lo que quiero es
que los pedidos de manolo se renumeren y queden sin huecos.

algún consejo?


Gracias mil



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