之前没有接触过SQL作业的操作
只是近期有个问题需要解决,没办法不学习
希望有给力的师傅给我写一个简单的例子
以我问题为中心,写个实例给我,截图也好
麻烦了!
如果能细心帮我搞定的,出来得到此贴100分
还可以到我昨天发的帖子回话,得到100分
非常感谢
如题:
现一数据库有T_SYS_COUNT表
表中有tablename和count字段
主要用来记录某张表的流水号最大值
比如现在A表的流水号已经从1排到1000,那么对应这里就是A  1000
我现在要实现每月1号定时把T_SYS_COUNT表中name等于A的count更新为1
记住,是要定时,就算数据没有数据插入或者删除动作也要执行
我知道是用作业来实现
可是我不会,所以希望给力的朋友能帮忙贴图
以这题为例
企业管理器
  --管理
  --SQL Server代理
  --右键作业
  --新建作业
  --"常规"项中输入作业名称
  --"步骤"项
  --新建
  --"步骤名"中输入步骤名
  --"类型"中选择"Transact-SQL 脚本(TSQL)"   
  --"数据库"选择执行命令的数据库
  --"命令"中输入要执行的语句:   
--你的SQL语句或存储过程
  --确定
  --"计划"项
  --新建计划
  --"名称"中输入调度名称
  --"调度类型"中选择你的作业执行安排
  --如果选择"重复执行"   
  --点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:   
我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定像这种复制粘贴的例子就算了

解决方案 »

  1.   

    CREATE PROCEDURE ReturnIDByMNo
    @BillName nvarchar(50) ,
    @LoginTime datetime 
     AS
    declare @count int
    declare @NumLen int
    declare @BillText nvarchar(50)
    declare @CurrentDate datetime
    declare @lenNo nvarchar(5)
    declare @lenMon nvarchar(2)
    declare @countLength int
    declare @result  nvarchar(60)
     set @LoginTime=getdate()
    declare BillNo_cursor cursor for select currentcount,BillText,CurrentDate,NumLen from B_IDSetByMNo where BillName=@BillName
    open BillNo_cursor
    fetch next from BillNo_cursor into @count,@BillText,@CurrentDate,@NumLen
    close BillNo_cursor
    Deallocate BillNo_cursor
    if(@@Fetch_status=-1)

    begin
    set @BillText=@BillName;
    set @count=1;
    set @NumLen=6;
    insert into B_IDSetByMNo(BillText,CurrentCount,NumLen,Mem,CurrentDate,BillName) values(@BillText,@count,@NumLen,@BillName,@LoginTime,@BillName)

    end
    else
    begin
    if year(@LoginTime)=year(@CurrentDate) and month(@LoginTime)=month(@CurrentDate)
    begin
    set @count=@count+1
    update B_IDSetByMNo set currentcount=@count,currentdate=@LoginTime where BillName=@BillName
    end
    else
    begin
    set @count=1;
    update B_IDSetByMNo set currentcount=1,currentdate=@LoginTime where BillName=@BillName
    end
    end
    set @result=@BillText
    if len(month(@LoginTime))=1
    set @lenMon='0'+convert(nvarchar(2),month(@LoginTime))
    else 
    set @lenmon=convert(nvarchar(2),month(@LoginTime))
    if(len(@count)<@NumLen)
    set @lenNo=substring('0000000001',0,@NumLen-len(@count)+1)
    set @lenNo=@lenNo+convert(nvarchar,@count)

    set @result=@result +substring(CAST(year(getdate()) as CHAR),3,2)+@lenmon+substring('0000000001',0,@NumLen-len(@count)+1)+convert(nvarchar,@count)
    select @result
    GO
    这是本人写的存储过程,用来获取流水号,每月都是从1开始的,以上仅供参考
      

  2.   

    数据库本身的job自然是可以,不过实在不懂,用windows的计划任务吧~~~~~~~~~~~~
      

  3.   

    根本不用那么麻烦,只要设计上注意下,即可解决你这个问题。
    我再给你加一个字段,叫MM(CHAR(4))记录序号对应的月份。存储过程这样写:
    CREATE procedure [dbo].[GetSNO](@TABLENAME VARCHAR(50), @SNO CHAR(4) output) as
    begin
      DECLARE @MM CHAR(4),@NO INT
      SET  @MM = SUBSTRING(convert(CHAR(8), getdate(), 112), 3,4);
      begin tran
      if not exists(select 1 from T_SYS_COUNT where TABLENAME = @TABLENAME)
    begin
      insert into T_SYS_COUNT(TABLENAME,COUNT,MM)
      values(@TABLENAME,1,@MM)
      set @SNO=1
    end
      else if not exists(select 1 from T_SYS_COUNT where TABLENAME = @TABLENAME AND MM = @MM)
    begin
      DELETE FROM T_SYS_COUNT WHERE TABLENAME = @TABLENAME;
      insert into T_SYS_COUNT(TABLENAME,COUNT,MM)
      values(@TABLENAME,1,@MM)
      set @SNO=1
    end
      else
    begin
      UPDATE T_SYS_COUNT set @NO = COUNT = (COUNT+1)%10000 where TABLENAME = @TABLENAME;
      SET @SNO=RIGHT('000'+@NO,4);
    end
      commit tran
    end
    GO这是测试代码
    DECLARE @SNO CHAR(4)
    EXEC GetSNO 'A',@SNO OUT
    PRINT @SNO
      

  4.   

    SQL 作业定时执行某存储过程完成某功能
    http://blog.csdn.net/maco_wang/article/details/3980517
      

  5.   

    谢谢 试过了 我改了改,把参数写死变成无参的存储过程了。但是问题是还要写SQL作业,不然没办法执行。如果再初始化中执行,那么还是只能是星期一的时候起单,。
      

  6.   

    话说 我还是没搞懂 你是作业不会弄呢 还是SQL语句不会写
      

  7.   

    你肯定没看懂,这个不是让你在SQL作业里执行的,而是在获取单据编号的那个存储过程中使用的(别告诉你你没用存储过程获取编号)。每次获取一个单据编号,判断下当前的序号是否在当月,如果不是就初始化下,是的话就获取+1后的序号,这个判断速度很快,可以忽略影响,所以没必要专门去写个作业初始化。