Скажем, у меня есть простая хранимая процедура, которая выглядит так (примечание: это всего лишь пример, а не практическая процедура):
CREATE PROCEDURE incrementCounter AS
DECLARE @current int
SET @current = (select CounterColumn from MyTable) + 1
UPDATE
MyTable
SET
CounterColumn = current
GO
Мы предполагаем, что у меня есть таблица под названием "myTable", которая содержит одну строку с "CounterColumn", содержащей наш текущий счет.
Может ли эта хранимая процедура выполняться несколько раз, в то же время?
то есть. это возможно:
Я дважды вызываю "incrementCounter". Вызов A доходит до точки, где задается "текущая" переменная (предположим, что она равна 5). Вызов B доходит до того момента, когда он устанавливает текущую переменную (которая также будет равна 5). Вызов завершает выполнение, затем завершает вызов B. В конце таблица должна содержать значение 6, но вместо этого содержит 5 из-за перекрытия выполнения