我正在做一个排行榜表(T_hist)
表内有 qid(外键) 日排行榜(dhits) 周排行榜(whits)  月排行榜(mhits)  总排行榜(hits)   都是int类型
我现在想做个触发器  每日零点把所有行的dhits字段清空 也就是0 每周一把whits清空  每月一号把mhits清空
(表内数据不变 就是在特定时间把全部行的特定字段更新为0就是了。)
  总排行榜一直不变请问如何实现呢?

解决方案 »

  1.   

    可以用3个定时作业来做
    --1.每日零点执行
    update T_hist set dhits=0
    --2.每周一零点执行
    update T_hist set whits=0
    --3.每月一号执行
    update T_hist set mhits=0定时作业的制定企业管理器 
    --管理 
    --SQL Server代理 
    --右键作业 
    --新建作业 
    --"常规"项中输入作业名称 
    --"步骤"项 
    --新建 
    --"步骤名"中输入步骤名 
    --"类型"中选择"Transact-SQL 脚本(TSQL)" 
    --"数据库"选择执行命令的数据库 
    --"命令"中输入要执行的语句: 
      update T_hist set dhits=0; --每周和每月的替换一下语句即可--确定 
    --"调度"项 
    --新建调度 
    --"名称"中输入调度名称 
    --"调度类型"中选择你的作业执行安排 
    --如果选择"反复出现" 
    --点"更改"来设置你的时间安排  
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
      

  2.   

    job实现比较好
    什么版本数据库?
    建议2005打上SP3  效果不错
      

  3.   


    有没有更好的办法呢???我无法连到服务器上 只能通过sql语句来实现啊。。
    mssql 2005 打了sp3了  job如何实现呢???
      

  4.   

    可使用以下方法用脚本直接创建定时作业
    --原作者邹建if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_createjob]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   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'   
      

  5.   

    用job实现       .