Что происходит в SQL 2005, когда он исчерпывает число для столбца автонумерации?

Из этот ответ : Когда вы используете оператор импорта, он всегда ищет фактический путь к модулю (и / или sys.modules); он не использует объекты модуля в локальном пространстве имен, которые существуют из-за предыдущего импорта.

Поэтому, если вы хотите использовать какой-либо объект из urllib, вам нужно ввести фактические объекты, которые вы хотите использовать:

import urllib.request

Вы также можете сделать что:

from urllib import request

fhand = request.urlopen('http://data.pr4e.org/romeo.txt')

10
задан Maxime Rouiller 4 September 2013 в 15:38
поделиться

6 ответов

Вы получите водосливную ошибку, когда максимальное значение будет достигнуто. Если Вы используете тип данных 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 не обеспечивает функциональности для заполнения разрывов идентификационных данных, таким образом, необходимо будет или сделать это собой или изменить тип данных столбца идентификационных данных.

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

Вот хорошее сообщение в блоге об этой теме.

14
ответ дан 3 December 2019 в 22:02
поделиться

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

1
ответ дан 3 December 2019 в 22:02
поделиться

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

1
ответ дан 3 December 2019 в 22:02
поделиться

Если столбцом идентификационных данных является Целое число, то Ваше макс. 2,147,483,647. Вы получите водосливную ошибку при превышении ее.

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

Дальнейшее обсуждение здесь. (Та же ссылка как xsl упомянутый).

0
ответ дан 3 December 2019 в 22:02
поделиться

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

0
ответ дан 3 December 2019 в 22:02
поделиться

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

0
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: