2008-11-04 4 views

ответ

13

При достижении максимального значения вы получите ошибку переполнения. Если вы используете тип данных 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. 

(Source)

Насколько я знаю, MS SQL не предоставляет функциональные возможности, чтобы заполнить пробелы, удостоверяющие личность, так что вы должны либо сделайте это самостоятельно или измените тип данных столбца идентификации.

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

Here is a good blog post about this topic.

1

Он не заполнит пробелы. Вместо этого вставки будут терпеть неудачу до тех пор, пока вы не измените определение столбца, чтобы не удалить личность и не найти другой способ заполнения пробелов или увеличить размер (перейдите от int к bigint) или измените тип данных (от int до десятичного), так что доступны больше идентификационных значений.

0

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

Если вы считаете, что это риск, просто используйте тип данных BIGINT, который дает вам 9,223,372,036,854,775,807. Невозможно представить таблицу базы данных с таким количеством строк.

Дальнейшее обсуждение here. (Та же ссылка, что и xsl).

1

Вам не удастся вставить новые строки и получите сообщение об ошибке, указанное выше, до устранения проблемы. Вы можете сделать это несколькими способами. Если у вас все еще есть данные и вы используете все значения id ниже max, вам придется изменить тип данных. Если данные очищаются на регулярной основе, и у вас есть большой пробел, который не будет использоваться, вы можете повторно установить идентификационный номер до наименьшего числа в этом промежутке. Например, на предыдущем задании мы регистрировали транзакции. У нас было, возможно, 40-50 миллионов в месяц, но мы очищали все, что было старше 6 месяцев, поэтому каждые несколько лет личность приближалась бы к 2 миллиардам, но у нас не было бы ничего с id менее 1,5 миллиарда, поэтому мы бы повторно назад к 0. Опять же, возможно, что ни один из них не будет работать для вас, и вам нужно будет найти другое решение.

0

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

0

Если вы удаляете «старые значения» время от времени, вам просто нужно сбросить семя, используя DBCC CHECKIDENT («MyTable», RESEED, 0);

+0

DBCC CHECKIDENT («MyTable», RESEED, -2147483647) может потенциально помочь, если вы уже заполнили строки 0-2147483647;) – keithl8041 2015-07-15 09:35:56