Arham Anees Ответов: 2

Большой разрыв между двумя столбцами первичного ключа int SQL


я заметил, что в моих 2, 3 программах первичный ключ каждой таблицы прыгал от 9 до 1006, все почти одинаковые прыжки. хотя этот столбец несколькими. в чем именно заключается проблема и как с ней справиться? и разве это вредно?
а дело есть
ID       date     custID invoice payment  arrears
59      12/3/2017   1      68       0.5    667
60      12/3/2017   1      51       0      718
61      12/3/2017   1      51       0      769
1056    12/4/2017   1      13       0      782
1057    12/4/2017   1      575      0      1357


Что я уже пробовал:

я попытался исследовать, но ничего не помогло.

2 Ответов

Рейтинг:
18

Richard Deeming

Наиболее вероятная причина заключается в том, что ваш сервер был перезапущен:
Отработка отказа или перезапуск результаты в заполнение идентичности | подключения Microsoft[^]

Такое поведение, по-видимому, является "преднамеренным".

Для SQL 2014 или более поздней версии добавление флага трассировки -T272 предполагается, что это решит проблему.


Arham Anees

этот ответ звучит хорошо для меня, но одна путаница: что, если я перезагрузлю свой компьютер и соединение будет дано из какого-то настольного приложения, это создаст проблему?

Richard Deeming

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

Arham Anees

ссылка для добавления флага трассировки
http://sql-articles.com/articles/general/enable-disable-trace-flags-in-sql-server/

Рейтинг:
0

OriginalGriff

Скорее всего, вы добавили строки, а затем удалили их: SQL doe не "повторно использует" числа в столбце идентификаторов, поэтому при удалении строк вы получаете пробелы в последовательности, которые не будут заполнены.
Это сделано специально, чтобы данные в других таблицах, которые ссылаются на "основную таблицу" через идентификатор, не связывали неправильные данные с "новой" строкой, даже если формальная связь внешнего ключа не была установлена.

Если вам нужна последовательность, которая всегда не имеет пробелов, то посмотрите на ROW_NUMBER (Transact-SQL) | Microsoft Docs[^] - но это не однозначно идентифицирует строку, за исключением контекста конкретного оператора SELECT, и по этой причине не должно использоваться в качестве идентификатора.