第一次做游标
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

浙公网安备 33010602011771号