Что произойдет, когда 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 до десятичного), так что доступны больше идентификационных значений.
Вы не сможете вставить новые строки и получите сообщение об ошибке, указанное выше, до тех пор, пока не устраните проблему. Вы можете сделать это несколькими способами. Если у вас все еще есть данные и используется весь идентификатор ниже max, вам придется изменить тип данных. Если данные очищаются на регулярной основе, и у вас есть большой пробел, который не будет использоваться, вы можете повторно установить идентификационный номер до наименьшего числа в этом промежутке. Например, на предыдущем задании мы регистрировали транзакции. У нас было, возможно, 40-50 миллионов в месяц, но мы очищали все, что было старше 6 месяцев, поэтому каждые несколько лет личность приближалась бы к 2 миллиардам, но у нас не было бы ничего с id менее 1,5 миллиарда, поэтому мы бы повторно назад к 0. Опять же, возможно, что ни один из них не будет работать для вас, и вам придется найти другое решение.
Если столбец идентификатора является целым числом, то ваш макс равен 2 147 483 647. Если вы превысите его, вы получите ошибку переполнения.
Если вы считаете, что это риск, просто используйте тип данных BIGINT, который дает вам 9,223,372,036,854,775,807. Невозможно представить таблицу базы данных с таким количеством строк.
Дальнейшее обсуждение здесь. (Та же ссылка, что и xsl).
В случае, если вы нажмете максимальное число для столбца с идентификатором, вы можете переместить данные из этой таблицы во вторичную таблицу с большим типом столбца идентификатора и указать начальное значение для этого нового значения идентификатора как максимальное предыдущего типа. Новые значения идентичности будут продолжены с этой точки.
Если вы время от времени удаляете "старые значения", вам просто нужно reset использовать семя DBCC CHECKIDENT ( "MyTable", RESEED, 0);