Reiniciar la llave primaria en SQL Server

Posted on Posted in SQL, SQL Server

Hay ocasiones en las que los números del campo Identity no van en orden o se saltan algunos ID, y no es que sea un requerimiento, pero normalmente es más practico que estén ordenados porque sabemos que numero representa que estado/ítem, por esa algunas veces vamos a querer reiniciar la llave primaria en SQL Server.

Normalmente cuando creamos alguna tabla para usar como catalogo queremos que los ID generados vallan en orden, por ejemplo, podríamos querer tener la tabla Status con los siguientes estados:

ID Status
1 Pendiente
2 Aprobado
3 En proceso
4 Finalizado
5 Cancelado

O cuando hemos estado realizando varias pruebas y hemos borrado algunos registros, nuestra tabla queda con saltos del 12 al 65, del 70 al 513, del 711 al 961, etc, ya que una vez que una llave primaria se quema, ya no es posible reusarla para un registro nuevo, la única forma es hacer un TRUNCATE o un RESEED para reiniciar la llave primaria en SQL Server.

Reiniciar la llave primaria usando TRUNCATE TABLE

Si tu tabla no está referenciada a ninguna otra por medio de su llave primaria, entonces es posible reiniciar el contador en una sola instrucción:

TRUNCATE TABLE [TABLENAME]

Lo que hace esta instrucción es eliminar los registros de la tabla y reiniciar la llave primaria en SQL Server, así que debería de ser suficiente con esto.

Como reiniciar la llave primaria si mi tabla está ligada a otra

Si tu tabla esta referenciada a otra tabla, entonces el TRUNCATE no va a funcionar, lo que tendrás que hacer para reiniciar el contador de la columna identity será usar las siguientes dos líneas de código

DELETE FROM TABLENAME

DBCC CHECKIDENT ('DATABASENAME.dbo.TABLENAME',RESEED, 0)

Lo que hace este código es lo siguiente:

– Borrar TODOS los registros de la tabla (siempre y cuando no haya un registro en una tabla referenciada usando algún identity de la tabla donde reiniciaremos el contador)

FORZAR a que el valor Identity sea 1 para el siguiente registro a insertarse

 

De cualquier forma es mejor usar el TRUNCATE ya que tiene más beneficios en cuanto a tiempo y procesos / espacio internos del motor, pero si las circunstancias no lo permiten, el RESEED lo hará.