Возможно по дизайну. Идентичность не гарантируется быть смежным и монотонным. Никто не может помочь, потому что никакой помощи не требуется. Приложения никогда не должны полагаться на личность, не имеющую пробелов. Значения строк значений 1,2, 100, 1000 всегда в порядке.
Как это возможно? Ну, для начала рассмотрим тривиальный случай DELETE
. Очевидно, что удаление строк оставило бы пробелы.
Более тонкая проблема заключается в том, что появляются пробелы в тождествах, даже если их нет. Это происходит потому, что есть удаления, вы просто не знаете о них. Они вызваны отказом от несанкционированных транзакций. Откат не может быть предотвращен, так как запрет откатов - это akine, говорящий «Это всегда будет успешным!», Т.е. игнорируя реальность (неудачи). Отключение клиента в середине вставки - это откат, и вы никогда не сможете этого предотвратить.
Всегда ожидайте пробелов. Код ожидает пробелов. Никогда не полагайтесь на тождества, которые смежны.
Я бы использовать последовательность, чтобы решить эту проблему
последовательностям имеют точно та же самая проблема. Это не какой-то надзор над дизайном, это фундаментальная проблема: нет идеального способа генерации смежных идентификаторов без пробелов. Единственным решением является сериализация всех входов (например, блокировка таблицы X), и никто не хочет этого делать.
Поиск «Ошибка идентификации SQL Server 2012» должен найти множество других вопросов/ответов. Но, как всегда, я бы посоветовал это: если для вас важны фактические числовые значения столбцов идентичности, вы делаете что-то неправильно. Они должны рассматриваться как непрозрачные капли, которые просто * бывают *, чтобы они могли вписаться в числовые столбцы. –
Является ли ваш работодатель ОК с публикацией всей информации о вашем проекте на снимке экрана? Я могу видеть, для чего предназначен проект, схема базы данных, идентификаторы ... –
Использование последовательностей в SQL Server 2012? –