建一个表.
表中一个行,一个列.
就存用户输入的这个时间.create table jobTime(d datetime)
insert jobtime getdate()用户输入时
只update就行了.这个表只update不delete和insertjob的调度为每天一次(最低的频率设置),或者小于这个,比如每小时,每分...
job的步骤里:if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0)
  --执行要操作的东西
else
  --不执行,或不要else 

解决方案 »

  1.   

    fcuandy你先别离开,让我考虑一下.看是否可行...千万
      

  2.   

    fcuandy 例如jobTime表中插入的数据为2007-12-01给我写一个作业,让它在2007-12-10日自动备份数据库test的作业吧..要脚本程序.谢谢.急用
      

  3.   

    你可以
    企业管理器>>SQLSERVER组>>选中某个SQL注册>>管理>>数据库维护计划>>新建维护计划
    在弹出的窗口第一步,选你要操作的库
    第二步是优化,的可以不选,直接下一步
    第三步检查完整性,你也可以不选,再直接下一步
    第四步就是备份了,将调度更改为每天执行一次,每天凌晨2点(具体时间你调),然后下一步
    第五步,选备份到的目录和备份文件扩展名,再下一步
    第六步,不用,直接下一步
    第七步,不用,直接下一步
    第八步,写作业记录,这里钩上,以便以后查看用.
    第九步,输个计划名,就OVER了.比如你输入的名为 backUp_MyDataBase_Task上面的完成后,到
    管理>>SQL SERVER代理>>作业下,就看到你刚才建的这个 backUp_MyDataBase_Task 作业了.
    点属性>>切换到"步骤"选项卡,选中第一步,点"编辑"看到命令里的sql语句了吧EXECUTE master.dbo.xp_sqlmaint N'-PlanID CC941789-25BF-4170-A4D2-6644DFB0C958 -WriteHistory  -VrfyBackup -BkUpMedia DISK -BkUpDB "E:\databak" -BkExt "BAK"'把我写的这句,
    if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0)粘到那句前面就OK了.手写的我就不写了,hehe.
      

  4.   

    fcuandy:如果像你这么说,代理服务岂不是每秒都在监测这个作业.否则的话,
    if exists(select 1 from jobTime where datediff(dd,getdate(),d)=0) 怎么会成立呢?
    不知道我的意思,你明白没有?
      

  5.   

    如果是秒的话,那确实,每秒都在执行备份计划,只不过碰到 if 这语句,它就不执行后面的了. 这样肯定是不行的.如果是天的话, 其实是windows服务充作定时器,到指定时间才去触发job执行,比如每天的2点,job就去执行. 然后 看 if的语句是否符合, 若符合,也即是说当前日期指定的日期,若符合,那就执行备份.如果是秒的话,那么也即,windows服务每秒种都叫job去执行这个计划,这个计划在执行时发现不符个这个if的检测,就结束了,下一秒又被重新执行.不知道我说明白了没有.
      

  6.   

    要睡了啊哥哥.
    msn:[email protected]
    不过不怎么上...
      

  7.   

    睡前再给点建议.1,让备份时间精确到某秒进行,本身不不合理(业务上有特殊需要除外,这里主要指你的领导或客户觉得这么做比较酷的话)
    因为,大的库,备份操作本身可能就有不短的时间,所以精确到秒触发备份没有意义. 如果是处理数据同步的话,我觉得到是合理的.
    2,如果非要精确到秒,我建议你写 windows 服务,或做定时的任务栏程序,时间一到就执行backup database的备份库脚本.
    3,若精确程序要求是不是很高,可以采用折衷的作法.
    job调度设为10分钟执行一次.(当然,你也可以设置为30分钟)
    d
    2007-11-5 12:00:00.000
    if exists(select 1 from jobTime where datediff(mi,d,getdate()) between 0 and 10) --or 30)
    在指定时间后的10(或30)分钟之内执行备份工作
      

  8.   

    USE [msdb]
    GO
    /****** 对象:  Job [test1.Subplan_1]    脚本日期: 11/04/2007 01:50:04 ******/
    BEGIN TRANSACTION
    DECLARE @ReturnCode INT
    SELECT @ReturnCode = 0
    /****** 对象:  JobCategory [Database Maintenance]    脚本日期: 11/04/2007 01:50:04 ******/
    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'Database Maintenance' AND category_class=1)
    BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Database Maintenance'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)
    EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'test1.Subplan_1', 
    @enabled=1, 
    @notify_level_eventlog=2, 
    @notify_level_email=0, 
    @notify_level_netsend=0, 
    @notify_level_page=0, 
    @delete_level=0, 
    @description=N'无描述。', 
    @category_name=N'Database Maintenance', 
    @owner_login_name=N'SVCTAG-DT5V52X\tech', @job_id = @jobId OUTPUT
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    /****** 对象:  Step [Subplan_1]    脚本日期: 11/04/2007 01:50:04 ******/
    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Subplan_1', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_success_step_id=0, 
    @on_fail_action=2, 
    @on_fail_step_id=0, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, @subsystem=N'SSIS', 
    @command=N'/Server "$(ESCAPE_NONE(SRVR))" /SQL "Maintenance Plans\test1" /set "\Package\Subplan_1.Disable;false"', 
    @flags=0
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'test1', 
    @enabled=1, 
    @freq_type=4, 
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=0, 
    @active_start_date=20071104, 
    @active_end_date=99991231, 
    @active_start_time=15100, 
    @active_end_time=235959
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
    COMMIT TRANSACTION
    GOTO EndSave
    QuitWithRollback:
        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
    EndSave:
    =================
    请问如何采用作业调度来处理这个问题.我的想法如下,把上面的程序写成存储过程sp_BackUp
    当用户在前台页面上修改备份时间时,动态的修改这个存储过程.这样做可行?如果行,这种存储过程要如何处理?请帮我写下.谢谢.