日期:2014-05-18  浏览次数:20467 次

多个作业同时进行出错,求解决
一个winform程序,需要按指定时间更改价格,比如三天后上午九点,物品a改价格,还有物品b、c,都要9点改。
第一天我指定了a要改,产生一个作业
第二,我又指定了b,又产生一个作业

到了第三天上午,可能积累了10多个作业

结果同时运行就出错了。好像不能同时运行那么多作业


求怎么解决????



------解决方案--------------------
SQL code

通过脚本创建JOB:   
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N[dbo].[p_createjob])   and   OBJECTPROPERTY(id,   NIsProcedure)   =   1)   
  drop   procedure   [dbo].[p_createjob]   
  GO   
    
  create   proc   p_createjob   
  @jobname   varchar(100),                           --作业名称   
  @sql   varchar(8000),                                 --要执行的命令   
  @serverName   sysname=,                         --job   server名   
  @dbname   sysname=,                                 --默认为当前的数据库名   
  @freqtype   varchar(6)=day,                 --时间周期,month   月,week   周,day   日   
  @fsinterval   int=1,                                   --相对于每日的重复次数   
  @time   int=170000                                       --开始执行时间,对于重复执行的作业,将从0点到23:59分   
  as   
  if   isnull(@dbname,)=   set   @dbname=db_name()   
    
  --创建作业   
  exec   msdb..sp_add_job   @job_name=@jobname   
    
  --创建作业步骤   
  exec   msdb..sp_add_jobstep   @job_name=@jobname,   
                  @step_name   =   数据处理,   
                  @subsystem   =   TSQL,   
                  @database_name=@dbname,   
                  @command   =   @sql,   
                  @retry_attempts   =   5,   --重试次数   
                  @retry_interval   =   5     --重试间隔   
    
  --创建调度   
  declare   @ftype   int,@fstype   int,@ffactor   int   
  select   @ftype=case   @freqtype   when   day   then   4   
                                                                                  when   week   then   8   
                                                                                  when   month   then   16   end   
                  ,@fstype=case   @fsinterval   when   1   then   0   else   8   end   
  if   @fsinterval<>1   set   @time=0   
  set   @ffactor=case   @freqtype   when   day   then   0   else   1   end   
    
  EXEC   msdb..sp_add_jobschedule   @job_name=@jobname,     
                  @name   =   时间安排,   
                  @freq_type=@ftype   ,                                                 --每天,8   每周,16   每月   
                  @freq_interval=1,                                                     --重复执行次数   
                  @freq_subday_type=@fstype,                                   --是否重复执行   
                  @freq_subday_interval=@fsinterval,                   --重复周期   
                  @freq_recurrence_factor=@ffactor,   
                  @active_start_time=@time                                       --下午17:00:00分执行   
    
  if   @servername=   
  set   @servername=@@servername   
  EXEC   msdb..sp_add_jobserver   @job_name   =   @jobname,     
            @server_name   =   @servername   
    
  go     
    
  --调用   
  --每天执行的作业   
  exec   p_createjob   @jobname=dd   
                                    ,@sql=insert   B   select   convert(char(10),getdate(),120),1+(select   max([text])   from   B)   
                                    ,@servername=job服务器名   
                                    ,@dbname=数据库名   
                                    ,@freqtype=day   
                                    ,@time=000000  


===============================================================

以下是另一个版本,出自博客园
http://www.cnblogs.com/datasky/archive/2006/12/28/606354.html

--每月执行的作业
exec p_createjob @jobname=mm,@sql=select * from syscolumns,@freqtype=month
--每周执行的作业
exec p_createjob @jobname=ww,@sql=select * from syscolumns,@freqtype=week
--每日执行的作业
exec p_createjob @jobname=a,@sql=select * from syscolumns
--每日执行的作业,每天隔4小时重复的作业
exec p_createjob @jobname=b,@sql=select * from syscolumns,@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[p_createjob]) and OBJECTP