У меня есть таблица SQL Tasks
со столбцами Id
и State
. Мне нужно сделать следующее: найти любую задачу с состоянием ReadyForProcessing
, получить все ее столбцы и установить ее состояние на Processing
. Нечто подобное (псевдокод):
BEGIN TRANSACTION;
SELECT TOP 1 * FROM Tasks WHERE State = ReadyForProcessing
// here check if the result set is not empty and get the id, then
UPDATE Tasks SET State = Processing WHERE TaskId = RetrievedTaskId
END TRANSACTION
Этот запрос будет выполняться параллельно от нескольких клиентов баз данных, и идея состоит в том, что если два клиента выполняют запрос параллельно, они получают разных задач и никогда не выполняют одну и ту же задачу.
Похоже, мне нужны подсказки о блокировке. Я прочитал эту статью MSDN , но там ничего не понимаю. Как использовать подсказки блокировки для решения вышеуказанной проблемы?