Подтвердить что ты не робот

Верхний предел для первичного ключа автоинкремента в SQL Server

Каков верхний предел для первичного ключа автоинкремента в SQL Server? Что происходит, когда первичный ключ автоинкремента SQL Server достигает своего верхнего предела?

4b9b3361

Ответ 1

Ответ Joel правильный, это верхний предел любого типа данных, который вы используете.

Вот пример двух из них:

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

Я действительно попал в лимит на работу, над которой работал. Фактическая ошибка:

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

Есть пара исправлений, которые я могу придумать с головы. Номер 1, вероятно, очень тяжелый и не очень вероятный, номер 2 прост, но, вероятно, вызовет проблемы в вашей базе кода.

  • Если столбец тождества не имеет значения для вас (это не внешний ключ и т.д.), вы можете просто обновить базу данных и reset столбец идентификации.
  • Измените свой столбец идентификационной информации на большее число. Например, если вы переполнили int, измените свой столбец идентификатора на большой int. Удача переполнена тем, что:)

Есть, вероятно, другие исправления, но нет волшебной пули. Я просто надеюсь, что этого не произойдет в таблице, которая является центром связки отношений, потому что, если это так, вы испытываете большую боль. Это не сложно, просто утомительно и долго.

Ответ 2

Это зависит от типа данных. Если вы используете bigint, вы вряд ли когда-либо переполнитесь. Даже обычный int дает вам пару миллиардов строк. Я никогда не переполнял, поэтому я не могу сказать вам, что произойдет, если вы это сделаете.

Ответ 3

Я расскажу вам, что произойдет... мои данные перестали вставляться в эту конкретную таблицу. База данных по-прежнему работает, но я обнаружил, что данные отсутствуют и непоследовательны. С небольшим исследованием я нашел таблицу ошибок, а затем провел ручную вставку. Ошибка такая же, как и выше.

Пришлось изменить столбец на BIGINT. В базе данных объемом 26 ГБ на несколько медленном сервере потребовалось около 30 минут. В архивной версии базы данных (150 ГБ или около того) это заняло довольно много времени.

К счастью, не слишком много отношений для этой таблицы, поэтому боль была довольно легкой.

Ответ 4

CHECKIDENT DBCC (SomeTable, RESEED, 1)

Это сбрасывает идентификатор 1 в таблице "SomeTable"

Не уверен, что это лучший способ сделать это.

Ответ 5

Описание типов данных:

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

Когда вы достигаете верхнего предела, автоинкремент переходит к нижнему пределу.