У меня есть таблица с уникальными значениями внутри нее, и после вызова хранимой процедуры я использую следующий код в подзапросе, чтобы получить случайное значение из таблицы:
SELECT TOP 1 UniqueID FROM UniqueValues
WHERE InitiatingID is NULL
ORDER BY NewID() ASC
Однако я заметил, что время от времени мне удается (и я предполагаю, что два вызова, выполняющиеся одновременно, вызывают это), чтобы дважды получить одно и то же уникальное значение, что вызывает некоторые проблемы в программе.
Есть ли способ (желательно не блокировать таблицу) сделать генерацию идентификатора уникальных значений полностью уникальной - или достаточно уникальной, чтобы не влиять на два одновременных вызова? Как примечание, я должен сохранить уникальные значения и не могу использовать GUID непосредственно здесь.
Спасибо
Кайл
Редактировать для уточнения:
Я буферизую уникальные значения. Вот что такое WHERE InitiatingID is NULL
. Когда значение выбирается из запроса, устанавливается InitiatingID, и поэтому его нельзя использовать до тех пор, пока он не будет освобожден. Проблема состоит в том, что в миллисекундах этого процесса установка InitiatingID
кажется, что значение снова берется, что наносит ущерб процессу.