Имею таблицу T
Несколько пользователей могут примерно одновременно вызывать процедуру:
1: select from T
2: if then update T
То есть решение об изменении данных в T строится на содержимом T.
Теперь предположим пользователь А вызвал эту процедуру и выполнился первый её шаг, когда процедуру вызвал пользователь Б, соответственно у обоих на втором шаге произойдет Update T. Если бы Б вызвал процедуру чуть позже (после шага 2 у пользователя А), то if then не сработал бы и результат был бы другой («Правильный» -- тот что надо).
Наглядный пример
SELECT @r = count(*) FROM T
if 1 = dbo.Четное(@r)
begin
UPDATE T SET [поле] = 5;
end
Подскажите как сделать такую «монолитную транзакцию»?