mysql version 5.1.6 CREATE EVENT [IF NOT EXISTS] /* 标注 1 */ event_name /* 标注 2 */ ON SCHEDULE schedule /* 标注3 */ [ON COMPLETION [NOT] PRESERVE] /* 标注4 */ [ENABLE | DISABLE] /* 标注5 */ [COMMENT 'comment'] /* 标注6 */ DO sql_statement /* 标注7 */
标注 3: ON SCHEDULE 计划任务 有两种设定计划任务的方式: AT 时戳 /* "单次的计划任务" */ EVERY 时间(单位)的数量 时间单位 [STARTS 时戳] [ENDS时戳] /* "重复的计划任务" */ 在两种计划任务中,时戳可以是任意的TIMESTAMP 和DATETIME 数据类型,要 求提供的是将来的时间(大于CURRENT_TIMESTAMP),而且小于Unix时间的 最后时间(等于或小于'2037-12-31 23:59:59')。
我觉得你要用存储过程,最好用mssql,这个配合里面的作业调度很好实现的~~~~~~~~~~
晕我说的不是调度时间,我说的是给存储过程一个时间段 然后隔一个小时插一条数据 如果用while循环是这么写while begin_time<end_time then set begin_time=begin_time+interval 1 hour; insert into table values(begin_time); end while;如果时间段隔离很大,循环次数多会很慢,有没有不用循环 一下就能实现这个功能的,或者比这个快的方法。
写成计划就可以了DECLARE @TaskID varchar(50), @TaskName varchar(50), @Person varchar(50), @date datetime,@days intDECLARE task_cursor CURSOR FOR SELECT TaskID,TaskName, Person,date,days FROM taskwhere (datediff(mi,getdate(),(dateadd(day,days,date)))<(24*60) and datediff(mi,getdate(),(dateadd(day,days,date)))>0) or (datediff(hh,getdate(),(dateadd(day,days,date)))<24 and datediff(hh,getdate(),(dateadd(day,days,date)))=0)OPEN task_cursorFETCH NEXT FROM task_cursor INTO @TaskID, @TaskName, @Person,@date,@daysWHILE @@FETCH_STATUS = 0 BEGIN --print'aa'+convert(datetime,@date,109) --set @date = substring(@date,7,4)+'-'+substring(@date,1,2)+'-'+substring(@date,4,2)+substring(@date,11,6) set @date=dateadd(day,@days,@date) insert into Messages values('任务到期提示', '你的任务<strong><a href="Restores.aspx?taskID='+@TaskID+'">'+ @TaskName+'</a></strong>将在'+convert(char(20),@date,120)+'时到期,<br/>请及时了结此任及时了结此任务<br/>注意:如不了结,系统会自动了结!', '系统管理员', @Person, 6, getdate(), 0, 1) insert into Task_temp values(@TaskID,@date) -- Get the next task. FETCH NEXT FROM task_cursor INTO @TaskID, @TaskName, @Person,@date,@days END CLOSE task_cursor DEALLOCATE task_cursor GO参考一下吧,没时间整理不明白的地方私聊
晕我说的不是调度时间,我说的是给存储过程一个时间段 然后隔一个小时插一条数据 如果用while循环是这么写 while begin_time <end_time then set begin_time=begin_time+interval 1 hour; insert into table values(begin_time); end while; 如果时间段隔离很大,循环次数多会很慢,有没有不用循环 一下就能实现这个功能的,或者比这个快的方法。
CREATE EVENT
[IF NOT EXISTS] /* 标注 1 */
event_name /* 标注 2 */
ON SCHEDULE schedule /* 标注3 */
[ON COMPLETION [NOT] PRESERVE] /* 标注4 */
[ENABLE | DISABLE] /* 标注5 */
[COMMENT 'comment'] /* 标注6 */
DO sql_statement /* 标注7 */
标注 3: ON SCHEDULE 计划任务
有两种设定计划任务的方式:
AT 时戳
/* "单次的计划任务" */
EVERY 时间(单位)的数量 时间单位 [STARTS 时戳] [ENDS时戳]
/* "重复的计划任务" */
在两种计划任务中,时戳可以是任意的TIMESTAMP 和DATETIME 数据类型,要
求提供的是将来的时间(大于CURRENT_TIMESTAMP),而且小于Unix时间的
最后时间(等于或小于'2037-12-31 23:59:59')。
然后隔一个小时插一条数据
如果用while循环是这么写while begin_time<end_time then
set begin_time=begin_time+interval 1 hour;
insert into table values(begin_time);
end while;如果时间段隔离很大,循环次数多会很慢,有没有不用循环
一下就能实现这个功能的,或者比这个快的方法。
@date datetime,@days intDECLARE task_cursor CURSOR FOR
SELECT TaskID,TaskName, Person,date,days
FROM taskwhere (datediff(mi,getdate(),(dateadd(day,days,date)))<(24*60) and datediff(mi,getdate(),(dateadd(day,days,date)))>0) or (datediff(hh,getdate(),(dateadd(day,days,date)))<24 and datediff(hh,getdate(),(dateadd(day,days,date)))=0)OPEN task_cursorFETCH NEXT FROM task_cursor
INTO @TaskID, @TaskName, @Person,@date,@daysWHILE @@FETCH_STATUS = 0
BEGIN
--print'aa'+convert(datetime,@date,109)
--set @date = substring(@date,7,4)+'-'+substring(@date,1,2)+'-'+substring(@date,4,2)+substring(@date,11,6)
set @date=dateadd(day,@days,@date)
insert into Messages values('任务到期提示', '你的任务<strong><a href="Restores.aspx?taskID='+@TaskID+'">'+
@TaskName+'</a></strong>将在'+convert(char(20),@date,120)+'时到期,<br/>请及时了结此任及时了结此任务<br/>注意:如不了结,系统会自动了结!', '系统管理员', @Person, 6, getdate(), 0, 1)
insert into Task_temp values(@TaskID,@date)
-- Get the next task.
FETCH NEXT FROM task_cursor
INTO @TaskID, @TaskName, @Person,@date,@days
END
CLOSE task_cursor
DEALLOCATE task_cursor
GO参考一下吧,没时间整理不明白的地方私聊
然后隔一个小时插一条数据
如果用while循环是这么写 while begin_time <end_time then
set begin_time=begin_time+interval 1 hour;
insert into table values(begin_time);
end while; 如果时间段隔离很大,循环次数多会很慢,有没有不用循环
一下就能实现这个功能的,或者比这个快的方法。