ORACLE中有DBMS_JOB包可以用来管理作业,可以达到你的目的:通过脚本建立作业,服务器重做后,再执行这个脚本重建作业。 SQL SERVER 应该可以实现同样的功能。
这是ORACLE上的一个脚本: -- Created on 2002-7-2 by ADMINISTRATOR declare -- Local variables here v_jobnum number; begin -- Test statements here dbms_job.submit(v_jobnum,'gbgl_fcjysgctz;',sysdate,'LAST_DAY(LAST_DAY(SYSDATE)+1)'); dbms_output.put_line('job '||v_jobnum||' has been submitted.'); --dbms_job.run(v_jobnum,TRUE); --dbms_job.run(7,TRUE); -- DBMS_JOB.REMOVE(6); COMMIT; end; submit 方法:建立一个作业,执行存储过程gbgl_fcjysgctz,执行时间是每月的最后一天,v_jobnum返回所建立的作业号。 run方法:手动执行这个作业。 remove方法:删除作业。 用select * from user_jobs 可以看到所建立的作业的相关信息: 作业号,所属用户,上次执行时间,时间间隔,下次执行时间,执行什么等等。 SQL SERVER中应该有类似的东西。
To : hjd_cw() ( ) 信誉 把 WAITFOR TIME '22:20' EXECUTE update_all_stats 放在存储过程里,我还是没明白又是什么时候来执行这个存储过程呢??
指示Microsoft SQL Server等待,直到给定数量的时间过去以后才执行,最多可以设置到24小时。'time'
需要等待的时间,时间可以是任何可接受的datetime数据类型的格式,或者可以作为一个本地变量给出。但是,不能指定datetime值的日期部分。TIME
指示SQL Server等到指定的时间例如:BEGIN
WAITFOR TIME '22:20'EXECUTE update_all_statsEND
SQL SERVER 应该可以实现同样的功能。
-- Created on 2002-7-2 by ADMINISTRATOR
declare
-- Local variables here
v_jobnum number;
begin
-- Test statements here
dbms_job.submit(v_jobnum,'gbgl_fcjysgctz;',sysdate,'LAST_DAY(LAST_DAY(SYSDATE)+1)');
dbms_output.put_line('job '||v_jobnum||' has been submitted.');
--dbms_job.run(v_jobnum,TRUE);
--dbms_job.run(7,TRUE);
-- DBMS_JOB.REMOVE(6);
COMMIT;
end;
submit 方法:建立一个作业,执行存储过程gbgl_fcjysgctz,执行时间是每月的最后一天,v_jobnum返回所建立的作业号。
run方法:手动执行这个作业。
remove方法:删除作业。
用select * from user_jobs 可以看到所建立的作业的相关信息:
作业号,所属用户,上次执行时间,时间间隔,下次执行时间,执行什么等等。
SQL SERVER中应该有类似的东西。
把
WAITFOR TIME '22:20'
EXECUTE update_all_stats
放在存储过程里,我还是没明白又是什么时候来执行这个存储过程呢??