Один из способов, с помощью которых я видел это, - создание таблицы, отображающей местоположение на следующий идентификатор.
CREATE TABLE LocationID {
Location varchar(32) PRIMARY KEY,
NextID int DEFAULT(1)
}
Внутри вашей хранимой процедуры вы можете выполнить обновление и получить текущее значение, одновременно увеличивая значение:
...
UPDATE LocationID SET @nextID = NextID, NextID = NextID + 1 WHERE Location = @Location
...
Вышеуказанное может быть не очень переносимым, и вы можете получить увеличенное значение вместо текущего. Вы можете настроить по умолчанию для столбца по желанию.
Еще одна вещь, о которой следует быть осторожным, это то, как часто вы будете нажимать на нее и собираетесь ли вы использовать ее из другой хранимой процедуры или из кода приложения. Если это из другой хранимой процедуры, то, вероятно, все в порядке. Если вы собираетесь использовать его в коде приложения, вам, возможно, лучше взять диапазон значений, а затем передать их в ваше приложение одно за другим, а затем получить другой диапазон. Это может оставить пробелы в вашей последовательности, если приложение выйдет из строя, пока оно все еще имеет половину выделенного блока.