Верхний предел для автоинкрементного первичного ключа в SQL Server - PullRequest
35 голосов
/ 04 ноября 2008

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

Ответы [ 5 ]

37 голосов
/ 04 ноября 2008

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

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

  • 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 прост, но, вероятно, вызовет проблемы в вашей кодовой базе.

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

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

4 голосов
/ 04 ноября 2008

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

2 голосов
/ 25 ноября 2008

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

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

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

1 голос
/ 22 декабря 2008

Проверка подлинности DBCC (SomeTable, RESEED, 1)

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

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

1 голос
/ 04 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...