2008-11-04 8 views

Respuesta

13

Recibirá un error de desbordamiento cuando se alcance el valor máximo. Si usa el tipo de datos bigint con un valor máximo de 9,223,372,036,854,775,807, probablemente nunca sea el caso.

El mensaje de error obtendrá, tendrá el siguiente aspecto:

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

(Source)

Por lo que yo sé MS SQL proporciona ninguna funcionalidad para llenar los vacíos de identidad, por lo que o bien tienen que hágalo usted mismo o cambie 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 aún mayor de valores para usar.

Here is a good blog post about this topic.

1

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

0

Si la columna de identidad es un 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, solo 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.

Más discusión here. (El mismo enlace que xsl mencionado).

1

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 aún tiene datos y está utilizando todos los ID por debajo del máximo, tendrá que cambiar el tipo de datos. Si los datos se depuran regularmente y tiene una gran brecha que no se va a usar, puede resiembrar el número de identidad al número más bajo en esa brecha. Por ejemplo, en un trabajo anterior, estábamos registrando transacciones. Teníamos quizás entre 40 y 50 millones por mes, pero estábamos purgando todo antes de los 6 meses, por lo que cada pocos años, la identidad se acercaba a los 2 mil millones, pero no teníamos nada con una identificación inferior a 1.500 millones, por lo que seríamos resembrados de nuevo a 0. De nuevo, es posible que ninguno de estos funcione para usted y tendrá que encontrar una solución diferente.

0

En caso de que golpee el 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 ese nuevo valor de identidad máximo del tipo anterior. Los nuevos valores de identidad continuarán desde ese punto.

0

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

+0

DBCC CHECKIDENT ('MyTable', RESEED, -2147483647) podría ayudar si ya ha completado las filas 0-2147483647;) – keithl8041

Cuestiones relacionadas