我有一个带有'WinningTime'字段的比赛表。每天在此时间之后提出请求的第一个用户赢得竞争,但是他们的响应时间有限(例如10分钟)。如果他们在这段时间内没有回应,则比赛被评为未获胜,以便下一位用户获胜。
我要做的是创建一个程序,将从表中返回获胜行,将其标记为获胜,然后10分钟后运行另一个程序,该程序将检测用户是否已响应并决定是否重置“胜利”字段与否。
我所有这一切都工作,除了我正在使用的WAITFOR DELAY也延迟了返回的结果集。在DELAY执行完毕之前,有没有办法强制存储过程返回SELECT
结果?
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