Це все ще дуже поширена проблема серед багатьох розробників та додатків незалежно від розміру.
На жаль, наведені вище пропозиції не виправляють усі сценарії, тобто спільний хостинг, ви не можете розраховувати на ваш хост, щоб встановити параметр запуску -t272.
Крім того, якщо у вас є існуючі таблиці, які використовують ці стовпчики ідентичності для первинних ключів, це величезні зусилля, щоб скинути ці стовпці і відтворити нові, щоб використовувати обхід послідовності BS. Вирішення послідовності корисне лише в тому випадку, якщо ви розробляєте нові таблиці з нуля в SQL 2012+
Суть полягає в тому, що якщо ви перебуваєте на сервері Sql 2008R2, то ОБЕРЕЖУЙТЕ НА ньому. Серйозно, залишайся на цьому. Поки Microsoft не визнає, що вони запровадили ВЕЛИЧУЮ помилку, яка все ще є навіть у Sql Server 2016, тоді ми не повинні оновлювати, поки вони не володіють нею та виправлять її.
Майкрософт прямо ввів переломну зміну, тобто вони зламали робочий API, який більше не працює так, як було розроблено, через те, що їх система забуває свою поточну ідентичність при перезапуску. Кеш або немає кешу, це неприпустимо, і розробник Microsoft за іменем Брайана повинен володіти ним, а не казати світові, що це "за задумом" і "особливістю". Звичайно, кешування - це особливість, але втрата сліду, якою має бути наступна ідентичність, НЕ ОСОБЛИВО. Це відчайдушний БУГ !!!
Я поділюся тим способом вирішення, яким я користувався, оскільки мій БД знаходиться на серверах спільного хостингу, я також не відкидаю і не відтворюю свої стовпчики первинного ключа, це було б величезним значенням PITA.
Натомість це мій ганебний злом (але не такий ганебний, як ця помилка POS, яку ввів мікрософт).
Злому / виправлення:
Перед командами вставки просто перезавантажте свою особу перед кожною вставкою. Це виправлення рекомендується лише в тому випадку, якщо ви не маєте адміністраторського контролю над вашим екземпляром сервера Sql, інакше я пропоную повторно перезапустити сервер.
declare @newId int -- where int is the datatype of your PKey or Id column
select @newId = max(YourBuggedIdColumn) from YOUR_TABLE_NAME
DBCC CheckIdent('YOUR_TABLE_NAME', RESEED, @newId)
Тільки ці 3 рядки безпосередньо перед вставкою, і вам слід добре пройти. Це дійсно не вплине на продуктивність настільки сильно, тобто буде непомітно.
Удачі.
order by ReceiptNo
до запиту, чи справді таких записів немає? Ви впевнені, що при вставці записів немає помилок? Якщо запис намагається вставити і не вдасться, ідентифікація збільшиться, те саме, якщо записи буде видалено. Якщо записи видаленоReceiptNo
, не скидається. Чи можете ви опублікувати таблицю створенняFee
таблиці?