Я думаю, что ваша хранимая процедура может выполнять блокировку и разблокировку (используется с " Select @strNewMax As NewMax ") ...
Вот пример из системы, которую я имею:
Declare @strNewMax Char
Select @strNewMax = 'N'
BEGIN TRANSACTION
/* Lock only the rows for this Item ID, and hold those locks throughout the transaction. */
If @BidAmount > (Select Max(AB_Bid_AMT) from AuctionBid With(updlock, holdlock) Where AB_AI_ID = @AuctionItemId)
Begin
Insert Into AuctionBid (AB_AI_ID, AB_Bid_AMT, AB_Emp_ID, AB_Entry_DTM)
Select @AuctionItemId, @BidAmount, @EmployeeId, GetDate()
Select @strNewMax = 'Y'
End
COMMIT TRANSACTION
Select @strNewMax As NewMax
Это вставит запись в качестве следующей наивысшей ставки, и все это при блокировке всей таблицы, поэтому никакие другие ставки не будут обрабатываться одновременно. Он вернет либо «Y», либо «N» в зависимости от того, сработал он или нет.
Может быть, вы можете взять это и настроить в соответствии с вашим приложением.