Что произойдет, если SQL Server 2005 достигнет максимума для столбца IDENTITY? Начинается ли он с самого начала и начинает восполнять пробел?
Как ведет себя SQL Server 2005, когда это происходит?
Что произойдет, если SQL Server 2005 достигнет максимума для столбца IDENTITY? Начинается ли он с самого начала и начинает восполнять пробел?
Как ведет себя SQL Server 2005, когда это происходит?
При достижении максимального значения вы получите сообщение об ошибке переполнения. Если вы используете тип данных bigint с максимальным значением 9,223,372,036,854,775,807
, это, скорее всего, никогда не произойдет.
Сообщение об ошибке, которое вы получите, будет выглядеть так:
Msg 220, Level 16, State 2, Line 10
Arithmetic overflow error for data type tinyint, value = 256.
Насколько я знаю, MS SQL не предоставляет функций для заполнения пробелов в идентификаторах, поэтому вам придется либо сделать это самостоятельно, либо изменить тип данных столбца идентификаторов.
В дополнение к этому вы можете установить начальное значение наименьшее отрицательное число, чтобы получить еще больший диапазон значений для использования.
Вот хороший пост в блоге на эту тему.
Он не заполнит пробелы. Вместо этого вставки не будут выполняться до тех пор, пока вы не измените определение столбца, чтобы либо удалить идентификатор и найти какой-либо другой способ заполнения пробелов, либо увеличить размер (перейти от int к bigint) или изменить тип данных (от int до decimal). ), чтобы было доступно больше значений идентификаторов.
Вы не сможете вставлять новые строки и будете получать сообщение об ошибке, указанное выше, пока не устраните проблему. Вы можете сделать это несколькими способами. Если у вас все еще есть данные и вы используете все идентификаторы ниже максимального, вам придется изменить тип данных. Если данные регулярно очищаются и у вас есть большой пробел, который не будет использоваться, вы можете повторно установить идентификационный номер до наименьшего числа в этом пробеле. Например, на предыдущей работе мы регистрировали транзакции. У нас было, может быть, 40-50 миллионов в месяц, но мы очищали все, что старше 6 месяцев, поэтому каждые несколько лет идентичность приближалась к 2 миллиардам, но у нас не было ничего с идентификатором ниже 1,5 миллиарда, поэтому мы повторно заполняли вернуться к 0. Опять же возможно, что ни один из них не будет работать для вас, и вам придется найти другое решение.
Если столбец идентификаторов является целым числом, то ваше максимальное значение равно 2 147 483 647. Вы получите ошибку переполнения, если превысите его.
Если вы считаете, что это риск, просто используйте тип данных BIGINT, который дает вам до 9 223 372 036 854 775 807. Невозможно представить таблицу базы данных с таким количеством строк.
Дальнейшее обсуждение здесь. (Та же ссылка, что и xsl).
В случае, если вы достигли максимального числа для своего столбца идентификаторов, вы можете переместить данные из этой таблицы во вторичную таблицу с большим типом столбца идентификаторов и указать начальное значение для этого нового значения идентификатора, чтобы оно было максимальным из предыдущего тип. Новые значения идентификаторов будут продолжаться с этой точки.
Если вы время от времени удаляете «старые значения», вам просто нужно сбросить начальное значение с помощью DBCC CHECKIDENT («MyTable», RESEED, 0);