2011-03-14 13 views
7

Si agrega un nuevo registro, elimine el registro, luego agréguelo una y otra vez, a tiempo, tarde o temprano, cuando agregue un nuevo registro de la identificación de la clave principal entera, eventualmente excederá los 2 mil millones.¿Qué le sucede a la identificación de la clave principal cuando supera el límite?

  1. ¿Qué pasa ahora? SQL Server iniciará la identificación de la clave principal desde 1 nuevamente? o -1?

  2. ¿Qué ocurre si ciclos 4 mil millones de veces; ¿cómo sabe SQL Server no reemplazar los datos anteriores?

+2

Siempre puede cambiar su tipo de datos de 'ID' a 'BIGINT' y obtiene +/- 9 quintillones (eso es ** 9 billones ** de valores ... debería ser suficiente para ** bastante tiempo para venir **! –

+1

O mejor aún use un [identificador único/GUID] (http://msdn.microsoft.com/en-us/library/ms187942.aspx) y solo se quedarán sin valores cuando el universo implosione. :) – CraigTP

+0

Tenga en cuenta que el comportamiento varía entre diferentes DBMS. Esta pregunta está etiquetada con MS SQL Server, por lo que no hay confusión real, pero si la pregunta incluía "¿Y qué hay de otro DBMS?" entonces terminarías con diferentes respuestas para las diferentes plataformas. –

Respuesta

18

se produce un error si el identity excedería los límites del tipo de datos haciendo que el resto de su cuestión discutible. Esto se puede ver por

CREATE TABLE #T 
(
id INT IDENTITY(2147483647,1) 
) 

INSERT INTO #T 
DEFAULT VALUES 

INSERT INTO #T 
DEFAULT VALUES /*Arithmetic overflow error converting IDENTITY to data type int.*/ 

GO 

SELECT * FROM #T 

DROP TABLE #T 
+0

Martin, ¿qué debería hacer un desarrollador de SQL Server si esto sucediera? – user960567

+1

@ user960567 En la mayoría de los casos, cambie el tipo de datos para permitir números más grandes. En algunos casos, podría considerar volver a numerar las filas existentes y restablecer la semilla de identidad, pero esto generalmente debe evitarse (las teclas deben considerarse inmutables y no alteradas ni recicladas en general) –

+0

Martin Gracias ... – user960567

8

Uso BIGINT y es probable que nunca alcanzará el límite.

+0

Bueno ... la identidad podría establecerse para empezar * muy alto * Oo –

+3

Use un [identificador único/GUID] (http://msdn.microsoft.com/en-us/library/ms187942.aspx) – CraigTP

Cuestiones relacionadas