Renumerar Tabla.

06/10/2005 - 13:05 por José Antonio | Informe spam
En una tabla que tiene una columna registro numerada por la aplicación(no es
una columna autoincrement), que no admite duplicados por que es la clave PK
principal de la tabla, si existen huecos por que se han anulado filas, ¿ de
que manera se puede renumerar para rellenar esos huecos y que se quede
ordenado por fecha y registro que es otra columna clave pero que si admite
duplicados?

la tabla en su origen esta asi:

Registro Fecha
1 01/01/05
2 10/01/05
3 05/01/05
4 02/01/05
5 01/01/05
al anular filas queda asi:

Registro Fecha
1 01/01/05
4 02/01/05
5 01/01/05

despues de renumerar debiera quedar asi:

Registro Fecha
1 01/01/05
2 01/01/05
3 02/01/05
Saludos.

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
06/10/2005 - 13:32 | Informe spam
Echa un vistazo a este ejemplo:

****************************************************

DROP TABLE #test
go
CREATE TABLE #test
(orden smallint,
nombre char(10))

INSERT #test SELECT 1, 'Juan'
INSERT #test SELECT 2, 'Pepe'
INSERT #test SELECT 3, 'Luis'
INSERT #test SELECT 4, 'José'
INSERT #test SELECT 5, 'Carlos'

SELECT * FROM #test

DELETE FROM #test WHERE orden in ( 2, 4)

SELECT * FROM #test

DECLARE @orden smallint SET @orden = 0
UPDATE T
SET @orden= @orden + 1, orden=@orden
FROM #test T

SELECT * FROM #test

***************************************

Espero te sirva


Un saludo

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

"José Antonio" escribió en el
mensaje news:
En una tabla que tiene una columna registro numerada por la aplicación(no


es
una columna autoincrement), que no admite duplicados por que es la clave


PK
principal de la tabla, si existen huecos por que se han anulado filas, ¿


de
que manera se puede renumerar para rellenar esos huecos y que se quede
ordenado por fecha y registro que es otra columna clave pero que si admite
duplicados?

la tabla en su origen esta asi:

Registro Fecha
1 01/01/05
2 10/01/05
3 05/01/05
4 02/01/05
5 01/01/05
al anular filas queda asi:

Registro Fecha
1 01/01/05
4 02/01/05
5 01/01/05

despues de renumerar debiera quedar asi:

Registro Fecha
1 01/01/05
2 01/01/05
3 02/01/05
Saludos.


Respuesta Responder a este mensaje
#2 José Antonio
06/10/2005 - 13:45 | Informe spam
Buen ejemplo Carlos, pero yo necesito que los nuevos numeros de orden los
asigne por el orden de las fechas.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
Echa un vistazo a este ejemplo:

****************************************************

DROP TABLE #test
go
CREATE TABLE #test
(orden smallint,
nombre char(10))

INSERT #test SELECT 1, 'Juan'
INSERT #test SELECT 2, 'Pepe'
INSERT #test SELECT 3, 'Luis'
INSERT #test SELECT 4, 'José'
INSERT #test SELECT 5, 'Carlos'

SELECT * FROM #test

DELETE FROM #test WHERE orden in ( 2, 4)

SELECT * FROM #test

DECLARE @orden smallint SET @orden = 0
UPDATE T
SET @orden= @orden + 1, orden=@orden
FROM #test T

SELECT * FROM #test

***************************************

Espero te sirva


Un saludo

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

"José Antonio" escribió en el
mensaje news:
En una tabla que tiene una columna registro numerada por la aplicación(no


es
una columna autoincrement), que no admite duplicados por que es la clave


PK
principal de la tabla, si existen huecos por que se han anulado filas, ¿


de
que manera se puede renumerar para rellenar esos huecos y que se quede
ordenado por fecha y registro que es otra columna clave pero que si
admite
duplicados?

la tabla en su origen esta asi:

Registro Fecha
1 01/01/05
2 10/01/05
3 05/01/05
4 02/01/05
5 01/01/05
al anular filas queda asi:

Registro Fecha
1 01/01/05
4 02/01/05
5 01/01/05

despues de renumerar debiera quedar asi:

Registro Fecha
1 01/01/05
2 01/01/05
3 02/01/05
Saludos.






Respuesta Responder a este mensaje
#3 Alejandro Mesa
06/10/2005 - 15:29 | Informe spam
Trata:

create table t1 (
registro int,
fecha datetime
)
go

insert into t1 values(1, '20050101')
insert into t1 values(2, '20050110')
insert into t1 values(3, '20050105')
insert into t1 values(4, '20050201')
insert into t1 values(5, '20050101')
go

delete t1
where registro in (2, 3)
go

update t1
set registro = (select count(*) from t1 as a where a.fecha < t1.fecha or
(a.fecha = t1.fecha and a.registro <= t1.registro))
go

select *
from t1
order by registro
go

drop table t1
go

Para hacer esto, primero debes eliminar la restriccion de clave primaria,
hacer la actualizacion y por ultimo recrear la clave primaria. Espero que no
hayan muchas referencias a la clave primaria porque antes de eliminarla,
debes eliminar cualquier referencia hacia ella y recrearlas despues de
recrear la pk.


AMB

"José Antonio" wrote:

Buen ejemplo Carlos, pero yo necesito que los nuevos numeros de orden los
asigne por el orden de las fechas.


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:
> Echa un vistazo a este ejemplo:
>
> ****************************************************
>
> DROP TABLE #test
> go
> CREATE TABLE #test
> (orden smallint,
> nombre char(10))
>
> INSERT #test SELECT 1, 'Juan'
> INSERT #test SELECT 2, 'Pepe'
> INSERT #test SELECT 3, 'Luis'
> INSERT #test SELECT 4, 'José'
> INSERT #test SELECT 5, 'Carlos'
>
> SELECT * FROM #test
>
> DELETE FROM #test WHERE orden in ( 2, 4)
>
> SELECT * FROM #test
>
> DECLARE @orden smallint SET @orden = 0
> UPDATE T
> SET @orden= @orden + 1, orden=@orden
> FROM #test T
>
> SELECT * FROM #test
>
> ***************************************
>
> Espero te sirva
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "José Antonio" escribió en el
> mensaje news:
>> En una tabla que tiene una columna registro numerada por la aplicación(no
> es
>> una columna autoincrement), que no admite duplicados por que es la clave
> PK
>> principal de la tabla, si existen huecos por que se han anulado filas, ¿
> de
>> que manera se puede renumerar para rellenar esos huecos y que se quede
>> ordenado por fecha y registro que es otra columna clave pero que si
>> admite
>> duplicados?
>>
>> la tabla en su origen esta asi:
>>
>> Registro Fecha
>> 1 01/01/05
>> 2 10/01/05
>> 3 05/01/05
>> 4 02/01/05
>> 5 01/01/05
>> al anular filas queda asi:
>>
>> Registro Fecha
>> 1 01/01/05
>> 4 02/01/05
>> 5 01/01/05
>>
>> despues de renumerar debiera quedar asi:
>>
>> Registro Fecha
>> 1 01/01/05
>> 2 01/01/05
>> 3 02/01/05
>> Saludos.
>>
>>
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida