SQL Server introduce un salto de 1000 posiciones en datos de tipo Identity

Categoría
Descripción

SQL Server introduce un salto de 1000 o 10000 valores en datos de tipo IDENTITY. Cuando una tabla contiene un campo de tipo IDENTITY, a veces puede ocurrir que se producen saltos de 1000 posiciones para tipo de dato INT, o de 10000 posiciones para tipo de dato BIGINT.

Esto se debe a una optimización de la caché introducida en SQL Server 2012, y que genera este tipo de saltos cuando el servidor SQL se reinicia. Por defecto, SQL Server reserva 1000 posiciones (o 10000 posiciones para datos BIGINT) en caché, por lo que en caso de reinicio (ya sea por un fallo de sistema o por un reinicio programado) esos valores se desperdician.

Es por este motivo que Microsoft desaconseja el uso de columnas IDENTITY a modo de punteros cuando la integridad de los datos dependientes de dicho tipo de columnas es crucial para el correcto funcionamiento del sistema. En estos casos, se recomienda el uso de contadores independientes, como por ejemplo secuencias de números. Por ejemplo:

CREATE SEQUENCE miPuntero AS INT START WITH 1 NO CACHE;

CREATE TABLE miTable (
   Id INT PRIMARY KEY DEFAULT NEXT VALUE FOR miPuntero, 
   ...<resto_de_campos>...
);