Блокировка в хранимой процедуре SQL Server - PullRequest
3 голосов
/ 20 января 2009

У меня есть хранимая процедура, которая манипулирует полем таблицы целых чисел (которое представляет порядковый номер) на основе некоторых критериев - критерии могут сбросить поле обратно в ноль. В многопользовательской среде существует вероятность того, что на поле может ссылаться 1 пользователь, прежде чем оно будет обновлено другим пользователем, поэтому я хотел бы предотвратить это, ограничив хранимую процедуру выполнением только для 1 пользователя за раз. Есть ли способ сделать это в моей хранимой процедуре?

1 Ответ

7 голосов
/ 20 января 2009

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

Например, если вы не хотите, чтобы кто-то еще читал или записывал в конкретную таблицу, пока вы выполняете несколько операторов, это утверждение в верхней части сделает это:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Я не рекомендую переходить на этот уровень, если в этом нет крайней необходимости, потому что он в основном нарушает преимущества параллелизма.

Вместо этого рассмотрите возможность использования чего-то более низкого или переработав логику, чтобы устранить необходимость в критической секции.

...