sábado, 14 de marzo de 2020

Reiniciar valor de un campo IDENTITY - SQL SERVER

Buenas tardes queridos lectores, antes que nada, hay que dejar en claro lo que es un campo identity en base de datos

El campo identity en la propiedad de una columna en una tabla de base de datos, que tiene como característica el incremento automático del valor, especificado al diseñar la tabla, si no se asigna un valor, predeterminadamente aumentará de uno en uno. 

Existen algunas restricciones para poder crear un campo identity y son las siguientes:

  • El tipo de datos siempre tiene que se entero (int).
  • La identidad no garantiza la unicidad del valor, eso tiene que hacerlo la primary key, por lo que se recomienda que la identidad también sea primary key.
  • Solamente puede existir un campo IDENTITY por tabla
Pues bien, después de esta pequeña introducción vamos creado los ejemplos que así es como aprendemos.

He escrito post sobre el campo identity antes, pero si estas leyendo este artículo, probablemente no has leído los otros, así que primero iniciaré creando una tabla con un campo IDENTITY.

Ejemplo 1: Crear una tabla de empleados que contenga un ID, que sea auto incremental y los datos generales del empleado

CREATE TABLE EMPLEADOS
(ID INT IDENTITY (1,1) PRIMARY KEY,
NOMBRES VARCHAR(MAX),
APELLIDOP VARCHAR(MAX),
APELLIDOM VARCHAR(MAX),
CURP VARCHAR(MAX)
)

Como podrán ver, lo interesante es el campo ID IDENTITY (1,1) PRIMARY KEY. Pero. ¿Que significa?. Pues bien, le indicamos que el campo ID, será un campo entero, será IDENTITY, que se comenzará en uno y se incrementará de uno en uno y además sera la llave primaria de la tabla, si no indicamos entre paréntesis el inicio y el valor auto incremental, de manera predeterminada sería inicio en uno y aumento en uno, por lo que en el ejemplo bastaría con escribir lo siguiente:
ID INT IDENTITY PRIMARY KEY. Esto surtiría el mismo efecto.

De manera gráfica podrán verlo así:



Ahora insertaremos valores en la tabla, usando la sentencia Insert into, pero no vamos a especificar el campo ID, este se llenara de manera automática.

INSERT INTO EMPLEADOS (NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES ('EMMANUEL', 'URIAS', 'ROBLES', 'UIRL850904')

SELECT * FROM EMPLEADOS


Como ven, no fue necesario ingresarle el ID al Insert, pues como es un campo identidad lo agrego de manera automática, vamos a ingresar otro registro de manera que se den cuenta que el id ahora será el 2

INSERT INTO EMPLEADOS (NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES ('CESAR', 'RAMIREZ', 'GASPAR', 'RACE900515')

SELECT * FROM EMPLEADOS 


Como pueden ver, el segundo registro ingreso el ID 2 de manera automática

Pero, ¿que pasa si borramos algún registro?,  pues vamos a averiguarlo. Borraremos el registro con el ID 2 y agregaremos un nuevo registro

delete from EMPLEADOS where id = 2

INSERT INTO EMPLEADOS (NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES ('ALEJANDRO', 'BALTIERRA', 'JIMENEZ', 'BAIA981231')

SELECT * FROM EMPLEADOS 


Como pueden ver el ID ahora pasó a ser el 3, aunque es el segundo registro, esto es porque la semilla (el numero consecutivo del ID), ya "quemó" el Id 2, es por eso que automáticamente registró el 3, y lo mismo pasaría en el futuro. ¿Pero como hacer para que los registros sigan de manera consecutiva?. Pues tenemos algunas alternativas.

  • Eliminar la tabla y volverla a crear. Desde luego, en este ejemplo es lo más fácil porque solo tenemos dos registros, pero en la vida real esto será totalmente inviable
  • Podemos ingresar el siguiente registro especificando el ID de la siguiente manera:

SET IDENTITY_INSERT  EMPLEADOS ON
INSERT INTO EMPLEADOS (id, NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES (2, 'CESAR', 'RAMIREZ', 'GASPAR', 'RACE900515')
SET IDENTITY_INSERT  EMPLEADOS OFF



  • El otro método tendría que ver en reiniciar la semilla, para casos del ejemplo, vamos a eliminar los datos de la tabla
delete from EMPLEADOS

Si ingresáramos los registro nuevamente, el ID correspondiente sería el 4, como lo vemos en el ejemplo


INSERT INTO EMPLEADOS (NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES ('EMMANUEL', 'URIAS', 'ROBLES', 'UIRL850904')

SELECT * FROM EMPLEADOS 


Como ven, se inicia en el 4, pues la semilla esta en el 4, nuevamente borramos la tabla, y reiniciamos la semilla de la siguiente manera:

delete from EMPLEADOS

DBCC CHECKIDENT ('EMPLEADOS'); 
GO 

Mediante la sentencia DBCC CHECKIDENT, nos informaremos en que número va nuestra semilla, y lo que nos arroja el gestor es lo siguiente:

Checking identity information: current identity value '4', current column value 'NULL'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Como ven, estamos en lo correcto aun despues de haber borrado nuevamente la tabla, el valor actual es 4, por lo que si ingresamos un nuevo registro, el ID será 5 de manera automática. Ahora vamos a establecer la semilla en 0, para que el nuevo valor ID sea 1, y lo haremos de la siguiente manera:

DBCC CHECKIDENT ('EMPLEADOS', RESEED, 0);
go

De esta manera, si insertamos nuevamente los registros, el Id nuevo será 1

INSERT INTO EMPLEADOS (NOMBRES, APELLIDOP, APELLIDOM, CURP)
VALUES ('EMMANUEL', 'URIAS', 'ROBLES', 'UIRL850904')

De esta manera queridos lectores, hemos reiniciado la semilla en una tabla de base de datos.

Hasta aquí el post, espero haya sido de su agrado y de utilidad, cualquier duda pueden comentarla y la resolvemos, espero comparta o den clic en algún anuncio que les interese. 

Saludos

No hay comentarios.:

Publicar un comentario

Reiniciar valor de un campo IDENTITY - SQL SERVER

Buenas tardes queridos lectores, antes que nada, hay que dejar en claro lo que es un campo identity en base de datos El campo identity e...