【发布时间】:2014-02-07 05:30:13
【问题描述】:
对于调度程序 - 给出开始时间、结束时间和 NextOccurance 分钟或小时。 为此,我准备了如下逻辑
SET @StartTime = 17:00:00
SET @TEMP_TIME = StartTime --initially
SET @ENDTIME = 23:59:59
SET @RepeatTimeUnit = 1 --assume unit is hour
SET @RepeatTimeCount = 1 --to consider one hour
执行以下循环后,开始时间将被更新。但是,当我在晚上 11 点到凌晨 12 点之间运行它时,在这种情况下,@NEXT_TIME 将需要 00:00:00。所以,条件
if(@NEXT_TIME>@CUR_TIME)
始终为假,因此循环进入无限执行模式。但除了这个持续时间之外,同样的逻辑运作良好。
如何处理这种情况? 感谢您的建议。
IF(@StartTime<@CUR_TIME AND @ENDTIME>@CUR_TIME)
WHILE(1=1)
BEGIN
SET @NEXT_TIME=(SELECT CASE @RepeatTimeUnit WHEN 1 THEN DATEADD(HH,@RepeatTimeCount,@TEMP_TIME) WHEN 2 THEN DATEADD(MI,@RepeatTimeCount,@TEMP_TIME) END)
SET @TEMP_TIME = @NEXT_TIME
IF(@NEXT_TIME>@CUR_TIME) BREAK
else CONTINUE
END
SET @StartTime=@NEXT_TIME
【问题讨论】:
-
也许保持最后的执行时间会对你有所帮助。
-
@EvertonAgner,你是对的。我对其进行了修改,并将先前的计算记录在单独的变量中。虽然最终会在明天晚上 11 点和 12 点之间进行测试。
标签: sql tsql datetime scheduled-tasks quartz-scheduler