Как реализовать генерацию последовательных числовых идентификаторов в MS SQL?

Наткнулся на проблему внезапных прыжков Identity Seed: при перезагрузке сервера БД значение может увеличиться на 1000. Что в итоге приводит к наличию примерно такой ситуации в таблице: записи нумеруются с 1, 2, 3...затем 1001, 1002 и так далее.

Прочитал что к чему; судя по всему, не стоит свою логику строить вокруг Identity. Каким же образом реализовать последовательный инкремент с поддержкой целостности, если это бизнес-необходимость? В голову приходит только вариант с добавлением еще одного поля... логику которого нужно как раз и прописать.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@awesomer
потому что этот механизм для гарантии уникальности, а не для гарантии неразрывной последовательности. все нормально.
заказываться бизнес-логикой на такие вещи - не правильно.
если вам нужно прям таки важна последовательная генерация номеров - SELECT MAX
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Smiz001
C#-developer
А почему не перейти на uniqueidentifier?
Ответ написан
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
значение может увеличиться на 1000
Либо у вас есть репликация на этой базе данных, либо неправильно настроено восстановление после сбоя (без отката незавершённых транзакций).
с добавлением еще одного поля... логику которого нужно как раз и прописать
Да, в триггере либо вычислять пропущенный номер, либо завести отдельную таблицу неиспользованных номеров и брать из неё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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