valor una incrementar existente ejemplo columna campo automaticamente autoincrementar auto_increment agregar sql sql-server auto-increment

una - Límite superior para la clave primaria autoincrement en SQL Server



incrementar un valor en sql server (5)

Depende del tipo de datos. Si usa bigint, es poco probable que se desborde. Incluso una int normal te da un par de miles de millones de filas. Nunca me he desbordado, así que no puedo decirte lo que sucederá si lo haces.

¿Cuál es el límite superior para una clave primaria autoincrement en SQL Server? ¿Qué sucede cuando una clave primaria de autoincrement de SQL Server alcanza su límite superior?


Descripciones de los tipos de datos:

BIGINT Integer data from -2^63 through 2^63 - 1 INT Integer data from -2^31 through 2^31 - 1 SMALLINT Integer data from -2^15 through 2^15 - 1 TINYINT Integer data from 0 through 255

Cuando alcanzas el límite superior, la autoincrementación va al límite inferior.


Te diré lo que sucede ... mis datos dejaron de insertarse en esa tabla específica. La base de datos todavía funciona, pero encontré datos faltantes e incoherentes. Con un poco de investigación, encontré la tabla de errores, luego ejecuté una inserción manual. El error es el mismo que el anterior.

Tuve que cambiar la columna a BIGINT. En una base de datos de 26 GB en un servidor algo lento, tomó aproximadamente 30 minutos. En la versión de archivo de la base de datos (150 GB más o menos) tomó bastante más tiempo.

Afortunadamente, no hay demasiadas relaciones para esta mesa, por lo que el dolor fue muy leve.


DBCC CHECKIDENT (SomeTable, RESEED, 1)

Esto restablece la identidad a 1 en la tabla ''SomeTable''

No estoy seguro si esta es la mejor manera de hacer esto.


La respuesta de Joel es correcta, es el límite superior de cualquier tipo de datos que use.

Aquí hay un ejemplo de dos de ellos:

  • int: 2 ^ 31-1 (2,147,483,647)
  • letra grande: 2 ^ 63-1 (9,223,372,036,854,775,807)

De hecho, llegué al límite en un trabajo en el que trabajé. El error real es:

Msg 8115, Level 16, State 1, Line 1 Arithmetic overflow error converting IDENTITY to data type int. Arithmetic overflow occurred.

Hay un par de soluciones a esto que puedo pensar en la parte superior de mi cabeza. El número 1 es probablemente muy difícil y no muy probable, el número 2 es fácil, pero probablemente cause problemas en su código base.

  1. Si la columna de identidad no le importa (no es una clave externa, etc.), puede volver a resembrar la base de datos y restablecer la columna de identidad.
  2. Cambie su columna de identidad a un número mayor. Entonces, por ejemplo, si ha desbordado un int, cambie su columna de identidad a un int grande. Buena suerte desbordante :)

Probablemente haya otras soluciones, pero no hay una solución mágica fácil. Solo espero que esto no ocurra en una mesa que sea el centro de muchas relaciones, porque si lo hace, sufrirá mucho dolor. No es una solución difícil, solo una tediosa y larga.