Каков верхний предел для первичного ключа автоинкремента в SQL Server? Что происходит, когда первичный ключ автоинкремента SQL Server достигает своего верхнего предела?
Верхний предел для первичного ключа автоинкремента в SQL Server
Ответ 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
Когда вы достигаете верхнего предела, автоинкремент переходит к нижнему пределу.