Identity – Caso práctico

Propiedad Identity – Caso

  • La propiedad Identity puede ser asignada a un solo campo en la tabla, generalmente se usa para saber la cantidad de registros insertados, o para ayudar a construir un código.
  • No es recomendable usarla como columna de código ya que los códigos generalmente son datos de tipo caracter.
  • Se recomienda usar para los códigos de las tablas campos de tipo nchar.

En este ejemplo se muestra como trabajar con la propiedad Identity y al borrar los últimos registros resetear la propiedad para que los siguientes registros insertados tengan el valor correcto correlativo. (Ver Uso de Identity)

Crear la base de datos

Create database SistemaER
go
use SistemaER
go

— Tabla con campo Identity
Create table Datos
(
DatosCodigo int Identity(1,1) primary key not null,
DatosDescripcion nvarchar(50),
DatosPrecio Numeric(9,2)
)
go




— Insertar registros
insert into Datos (DatosDescripcion, DatosPrecio)
values (‘Casaca’,180),(‘Pantalón’,800),(‘Sombrero’,250)
go

— Los código de los registros insertados son: 1,2 y 3
select * from Datos
go

— Al insertar no se especifica el campo Identidad

insert into Datos (DatosCodigo, DatosDescripcion, DatosPrecio)
values (4,’Corbata’,60)
go
 Mens. 544, Nivel 16, Estado 1, Línea 1
No se puede insertar un valor explícito en la columna de identidad  de la tabla ‘Datos’ cuando IDENTITY_INSERT es OFF. 

— Insertar dos registro mas

insert into Datos ( DatosPrecio, DatosDescripcion)
values (390, ‘Zapatos’),(120,’Correo’)
go

— Los dos nuevos registros toman los códigos 4 y 5
select * from Datos
go

— Borrar físicamente los registros 3, 4 y 5 (Ver Eliminar registros)

delete Datos where DatosCodigo in (3,4,5)
go

— Quedaron solamente los registro 1 y 2, si se inserta un nuevo registro debería tomar el número 3, el valor de la identidad quedó en CINCO (Ver la propiedad con @@Identity)

select @@IDENTITY
go

El valor de identity debe corregirse, insertamos un registro sin la corrección

insert into Datos ( DatosPrecio, DatosDescripcion)
values (1500, ‘Reloj’)
go

— Listar los registros

select * from Datos
go

El código del registro insertado debería ser TRES

Primero: borrar el registro con el identidad incorrecto (Registro 6)

delete Datos where DatosCodigo = 6
go
— El valor de Identity debería ser 2, para que al insertar el nuevo registro sea el número 3
DBCC CheckIdent (Datos, Reseed, 2)
go

Se inserta ahora el Reloj… que debe ser el número 3

insert into Datos ( DatosPrecio, DatosDescripcion)
values (1500, ‘Reloj’)
go
— Listado
select * from Datos
go

— Si se eliminan todos los registros físicamente

delete Datos
go
DBCC CheckIdent (Datos, Reseed, 0)
go

 

 

— Uso de Identidad con valores inicial e incremento diferente de 1.
Tabla Apuestas

Create table Apuestas
(
ApuestasCodigo int Identity(10,5) primary key not null,
ApuestasDescripcion nvarchar(50),
ApuestasPrecio Numeric(9,2)
)
go

— Insertar registros

insert into Apuestas ( ApuestasPrecio, ApuestasDescripcion)
values (1500, ‘Ganador Premio’),(50, ‘Empate’),(-60, ‘Perdedor’)
go
— Los códigos son:
select * from Apuestas
go