2008-11-04 19 views

Respuesta

35

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

He aquí un ejemplo de dos de ellos:

  • int: 2^31-1 (2.147.483.647)
  • bigint: 2^63-1 (9.223.372.036.854.775.807)

Tengo realidad 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 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 es importante para usted (no es una clave externa, etc.), entonces 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 que :)

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 un grupo de relaciones, porque si lo hace, tendrás mucho dolor. No es una solución difícil, solo una tediosa y larga.

4

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.

+0

estoy usando int (11) ¿qué tal eso? ¿Cuántos datos?y qué pasó si el auto_increment se desbordó? –

0

, tipos de datos descripciones:

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 llegue al límite superior del autoincrement va al límite inferior.

2

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 tabla, por lo que el dolor fue muy leve.

1

DBCC CHECKIDENT (alguna_tabla, RESEED, 1)

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

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

Cuestiones relacionadas