Очередь запросов к хранимой процедуре сервера sql - PullRequest
1 голос
/ 23 ноября 2011

Я работаю с хранимой процедурой, которая:

  1. определяет количество строк в таблице, где столбец selectedBy равен нулю

  2. случайным образом выбирает одну из этих строк

  3. обновляет столбец selectedBy этой строки

  4. возвращает строку клиенту

Как запретить клиентам выбирать одну и ту же строку в ситуациях, когда они выбирают в одно и то же время?

Я пробовал различные табличные подсказки и уровни изоляции, но просто получал исключения тупиковых ситуаций на клиенте,Я просто хочу, чтобы второй звонок ожидал долю секунды, пока первый звонок не будет завершен.

1 Ответ

2 голосов
/ 23 ноября 2011

Один из способов избежать взаимоблокировок (как указано в заголовке вашего вопроса) состоит в сериализации доступа к этой процедуре.

Вы можете сделать это с sp_getapplock и sp_releaseapplock

См. Блокировки приложений (или мьютексы) в SQL Server 2005 для примера кода.

...