На самом деле есть только три способа сделать это.
Измените столбец ID на столбец IDENTITY, в котором он автоматически увеличивается на некоторое значение при каждой вставке.
Измените столбец ID на GUID с ограничением по умолчанию NEWID () или NEWSEQUENTIALID (). Затем вы можете вставить свое собственное значение или позволить таблице генерировать одно значение для вас при каждой вставке.
На каждой вставке начинайте транзакцию. Затем получите следующий доступный идентификатор, используя что-то вроде select max (id) +1. Сделайте это в одном SQL-выражении, если это возможно, чтобы ограничить возможность столкновения.
В целом большинство людей предпочитают вариант 1. Он быстрый, простой в реализации, и большинство людей его понимают.
Я склоняюсь к варианту 2 с приложениями, над которыми я работаю, просто потому, что мы склонны масштабировать (и увеличивать) наши базы данных. Это означает, что у нас обычно есть приложения с несколькими мастерами. Имейте в виду, что использование GUID в качестве первичных ключей может означать, что ваши индексы регулярно удаляются.
Я бы держался подальше от варианта 3, если у вас просто нет выбора. В этом случае я бы посмотрел, как в любом случае структурирована модель данных, потому что обязательно что-то не так.