第一次做游标

A表 字段:id 自增
                     uname varchar(20)
                     class varchar(20)

B表 字段    id 自增
                     uname varchar(20)
                     class varchar(20)
                     number varchar(30)

要求一存储过程 自动为B表number字段条件一序列号 如"D20100910"+长度(如 4位,0001开始,后者自增1)

分析 一 必须使用游标 加入到一临时表 为临时表添加一字段 用来动态游走用以识别当前所在位置

         二 序列号不能有重复 这里我采用取A表id字段用以判断,由于本人第一次使用游标,所以高手不要嘲笑,都是慢慢来的

        select uname,class into @aa from A    将A表插入到临时表#aa中

        alter table #aa add id int not null identity(1,1)  为#aa表插入一自增字段 用于游标游走判断

        alter table #aa number varchar(30) 为#aa表插入字段number

        declare MYCURSOR CURSOR for select id from #aa 声明一个游标 取值源自id  用以判断当前所操作行的id

        open MYCURSOR 打开游标

        declare @btop int 用以取到B表中id的最大值

        select top 1 @btop=id from B order by id desc

        declare @tempid int 用于保存当前游标

        declare @number varchar(30)定义编号

        fetch next from MYCURSOR into @tempid 当游标游走的时候将游标的值(也就是赋给游标的值)赋给@tempid

        while(@@fetch_status=0)
        begin
           set @number=@tempid+@btop
           while len(@tnum)<3定义后面长度3 就是'00x' 长度不够3 左边补0
             begin
               set @number='0'+@number

             end
               set @tnum='D20101111'+@tnum
               update #aa set number=@number where id=@tempid
               fetch next from MYCURSOR into @tempid
        end
        insert into B select uname,class,number from #aa
    close MYCURSOR
    deallocate MYCURSOR

posted @ 2010-11-19 23:53  SpringNumb  阅读(157)  评论(0)    收藏  举报