У меня есть таблица соревнований с полем «WinningTime».Каждый день первый пользователь, сделавший запрос после этого времени, выигрывает соревнование, однако у него есть ограниченное время для ответа (скажем, 10 минут).Если они не отвечают в течение этого времени, соревнование помечается как не выигранное, поэтому выигрывает следующий пользователь.
Я пытаюсь создать процедуру, которая будет возвращать выигрышную строку изв таблице, отметьте его как выигранный, затем через 10 минут запустите другую процедуру, которая определит, ответил ли пользователь и решит, сбросить ли поле «Выиграно» или нет.
У меня все это работает сИсключение составляет то, что WAYITFOR DELAY, который я использую, также задерживает возвращаемый набор результатов.Есть ли способ заставить хранимый процесс возвращать результаты SELECT
до завершения выполнения DELAY?
BEGIN
DECLARE @ID int
IF EXISTS(
SELECT ID
FROM Competitions
WHERE COALESCE(Won, 0) != 1
AND WinningTime < GetDate()
)
BEGIN
--If we have a winner then select the row (whilst locking the table to prevent multiple winners), then update the row to mark the competition as being won
BEGIN TRAN
--Select row
--Update row to mark it as 'Won'
COMMIT TRAN
--** We need to return the previous select before executing this **
WAITFOR DELAY '000:10:00'
EXECUTE ResetCompetition @CompID = @ID;
END
END
Я заменил некоторые из sql для краткости комментариями