IDENTITY, SEQUENCE

21/12/2005 - 12:30 por Edison | Informe spam
Hola a todos:

He creado una tabla en la cual el ID es SMALLINT IDENTITY(1,1)

Inserto n registros y cuando elimino un registro, queda un "hueco" en el ID,
si por ejemplo hay 5 registros y elimino uno de ellos o todos, en la nueva
inserción empieza desde 6 por decir.


Como puedo evitar esto en SQL Server, en Oracle e Interbase lo controlo
conlas sequencias, pero aqui en SQL server no se como hacerlo.

Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
21/12/2005 - 12:39 | Informe spam
Hola,

Con los identity siempre se generarán esos huecos.
Puede mirar también como comprobar y cambiar el valor del contador del
identity con DBCC CHECKIDENT.

Explicanos como quieres gestionar exactamente esos huecos, y que
inconveniente tienes a que los haya, para ver la mejor solución a tu
problema concreto.

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Edison" escribió en el mensaje
news:u9j%
Hola a todos:

He creado una tabla en la cual el ID es SMALLINT IDENTITY(1,1)

Inserto n registros y cuando elimino un registro, queda un "hueco" en el
ID, si por ejemplo hay 5 registros y elimino uno de ellos o todos, en la
nueva inserción empieza desde 6 por decir.


Como puedo evitar esto en SQL Server, en Oracle e Interbase lo controlo
conlas sequencias, pero aqui en SQL server no se como hacerlo.

Gracias por su ayuda.

Respuesta Responder a este mensaje
#2 Victor Koch
21/12/2005 - 14:27 | Informe spam
Hola Edison,

Como te explico el colega Salvador esos huecos los vas a tener.
En muchas ocasiones es una buena practica "anular el registro" en vez de
"eliminarlo". Esto evita los huecos y cumple con las normas de auditoria.

Un saludo, Víctor Koch.


"Edison" escribió en el mensaje
news:u9j#
Hola a todos:

He creado una tabla en la cual el ID es SMALLINT IDENTITY(1,1)

Inserto n registros y cuando elimino un registro, queda un "hueco" en el


ID,
si por ejemplo hay 5 registros y elimino uno de ellos o todos, en la


nueva
inserción empieza desde 6 por decir.


Como puedo evitar esto en SQL Server, en Oracle e Interbase lo controlo
conlas sequencias, pero aqui en SQL server no se como hacerlo.

Gracias por su ayuda.


Respuesta Responder a este mensaje
#3 Alejandro Mesa
21/12/2005 - 17:06 | Informe spam
Edison,

Quiero agregar a lo dicho por Salvador y Victor, que de lo contrario tendras
que dejar de usar la propiedad IDENTITY y crear tu propio contador, lo cual
puedes implementar usando una segunda tabla.

Ejemplo:

use northwind
go

create table t1(
c1 int not null unique check(c1 >= 0)
)
go

insert into t1(c1) values(0)
go

create table t2(
c1 int primary key,
c2 varchar(25) not null unique
)
go

create procedure dbo.p1
@id int output
as
set nocount on
update t1
set @id = c1 = c1 + 1

return @@error
go

create procedure dbo.p2
@c2 varchar(25)
as
set nocount on

declare @nuevo_id int
declare @rv int
declare @error int

begin transaction

exec @rv = dbo.p1 @nuevo_id output

set @error = isnull(nullif(@rv, 0), @@error)

if @error != 0 goto ErrorHandler

insert into t2(c1, c2) values(@nuevo_id, @c2)

set @error = @@error

if @error != 0 goto ErrorHandler

commit transaction

return @@error

ErrorHandler:

if @@trancount > 0
rollback transaction

return -1
go

exec dbo.p2 'primero'
exec dbo.p2 'segundo'
go

exec dbo.p2 null
go

exec dbo.p2 'tercero'
go

select * from t2
go

drop procedure p2, p1
go

drop table t2, t1
go


AMB

"Edison" wrote:

Hola a todos:

He creado una tabla en la cual el ID es SMALLINT IDENTITY(1,1)

Inserto n registros y cuando elimino un registro, queda un "hueco" en el ID,
si por ejemplo hay 5 registros y elimino uno de ellos o todos, en la nueva
inserción empieza desde 6 por decir.


Como puedo evitar esto en SQL Server, en Oracle e Interbase lo controlo
conlas sequencias, pero aqui en SQL server no se como hacerlo.

Gracias por su ayuda.



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