tablas tabla saving requieren recreación realizado que puedo permitted permitir permite not modificar los impedir guardar columna changes cambios sql sql-server-2005 identity limits

tabla - saving changes is not permitted sql server



¿Qué sucede en SQL 2005 cuando se agota el número de una columna de autonumber? (6)

¿Qué sucede cuando SQL Server 2005 llega al máximo para una columna de IDENTIDAD? ¿Comienza desde el principio y comienza a rellenar el hueco?

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


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


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.


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.


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 brinda hasta 9.223.372.036.854,775,807. No puedo imaginar una tabla de base de datos con tantas filas.

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


Obtendrá 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 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 tendrá que hacerlo usted mismo o cambiar el tipo de datos de la columna de identidad.

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

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


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