¿Qué sucede en SQL 2005 cuando se queda sin número para una columna de numeración automática?

StackOverflow https://stackoverflow.com/questions/262106

Pregunta

¿Qué sucede cuando SQL Server 2005 alcanza el máximo para una columna IDENTITY? ¿Comienza desde el principio y comienza a rellenar el vacío?

¿Cuál es el comportamiento de SQL Server 2005 cuando sucede?

¿Fue útil?

Solución

Recibirá un error de desbordamiento cuando se alcance el valor máximo . Si utiliza el tipo de datos bigint con un valor máximo de 9,223,372,036,854,775,807 , lo más probable es que este nunca sea el caso.

El mensaje de error que recibirá se verá así:

Msg 220, Level 16, State 2, Line 10
Arithmetic overflow error for data type tinyint, value = 256.

(Fuente)

Hasta donde yo sé, MS SQL no proporciona ninguna funcionalidad para llenar los vacíos de identidad, por lo que deberá hacerlo usted mismo o cambiar el tipo de datos de la columna de identidad.

Además de esto, puede establecer el valor inicial en el número negativo más pequeño, para obtener un rango de valores aún mayor para usar.

Aquí hay una buena publicación de blog sobre este tema .

Otros consejos

No llenará los huecos. En cambio, las inserciones fallarán hasta que cambie la definición de la columna para descartar la identidad y encontrar otra forma de rellenar los huecos o aumentar el tamaño (ir de int a bigint) o cambiar el tipo de datos (de int a decimal ) para que haya más valores de identidad disponibles.

No podrá insertar nuevas filas y recibirá el mensaje de error mencionado anteriormente hasta que solucione el problema. Puedes hacer esto de varias maneras. Si todavía tiene datos y está utilizando todas las identificaciones por debajo del máximo, deberá cambiar el tipo de datos. Si los datos se purgan de forma regular y tiene un gran espacio que no se va a utilizar, puede volver a colocar el número de identidad en el número más bajo en ese espacio. Por ejemplo, en un trabajo anterior, estábamos registrando transacciones. Teníamos tal vez 40-50 millones por mes, pero estábamos purgando todo lo que tenía más de 6 meses, por lo que cada pocos años, la identidad se acercaba a los 2 mil millones, pero no tendríamos nada con una identificación por debajo de 1,5 mil millones, por lo que volveríamos a sembrar volver a 0. De nuevo, es posible que ninguno de estos funcione para usted y tendrá que encontrar una solución diferente.

Si la columna de identidad es un número entero, entonces su máximo es 2,147,483,647. Obtendrá un error de desbordamiento si lo supera.

Si cree que esto es un riesgo, simplemente use el tipo de datos BIGINT, que le da hasta 9.223.372.036.854.775.807. No puedo imaginar una tabla de base de datos con tantas filas.

Discusión adicional aquí . (Mismo enlace que xsl mencionado).

En el caso de que llegue al número máximo para su columna de identidad, puede mover los datos de esa tabla a una tabla secundaria con un tipo de columna de identidad más grande y especificar el valor inicial para que el nuevo valor de identidad sea el máximo del tipo anterior Los nuevos valores de identidad continuarán desde ese punto.

Si elimina " valores antiguos " de vez en cuando solo necesita restablecer la semilla usando DBCC CHECKIDENT ('MyTable', RESEED, 0);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top