Вот команда SQL UPDATE
с параметрами ...
UPDATE MyTable
SET MyField = @newvalue,
@success = 1
WHERE
Id = @id
AND MyField = @oldvalue
Многие клиенты будут запускать эту команду с одинаковыми значениями параметров @id
и @oldvalue
одновременно. Я хочу, чтобы только один из них был «победителем» и установил MyField
на свой собственный @newvalue
, и чтобы он знал, что он выиграл, потому что выходной параметр @success
будет установлен в 1.
Какой самый низкий уровень изоляции необходим для того, чтобы это работало и гарантировало, что только один клиент когда-либо «победит»? Нужна ли транзакция для этого одного заявления?
Я использую SQL Server 2008, но надеюсь, что есть стандартный ответ SQL.