Препятствуйте тому, чтобы Хранимая процедура была выполнена дважды одновременно

Замеченный Ваш комментарий об использовании его для почтовой проверки и необходимости в плагине, плагин проверки может помочь Вам, его расположенному в http://bassistance.de/jquery-plugins/jquery-plugin-validation/ , это идет с почтовым правилом также.

7
задан marc_s 29 July 2009 в 21:11
поделиться

4 ответа

да, есть способ. используйте так называемые блокировки приложений SQL Server .

РЕДАКТИРОВАТЬ: да, это также работает в SQL Server 2000 .

10
ответ дан 6 December 2019 в 12:53
поделиться

Вы можете использовать sp_getapplock sp_releaseapplock , как в примере, найденном в Lock a Хранимая процедура только для одноразового использования .

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

5
ответ дан 6 December 2019 в 12:53
поделиться

как насчет блокировки фиктивной таблицы? Это не вызовет тупиковых ситуаций в случае сбоев.

1
ответ дан 6 December 2019 в 12:53
поделиться

В начале процедуры проверьте, заблокирован ли фрагмент данных, если не заблокировать его

В конце процедуры разблокировать фрагмент данных.

т.е.

SELECT @IsLocked=IsLocked FROM CheckLockedTable Where spName = 'this_storedProcedure'

IF @IsLocked = 1
    RETURN
ELSE
    UPDATE CheckLockedTable SET IsLocked = 1 Where spName = 'this_storedProcedure'

.
.
.

-- At end of Stored Procedure
    UPDATE CheckLockedTable SET IsLocked = 0 Where spName = 'this_storedProcedure'
0
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: