

drop proc testzzzzz
go
create proc testzzzzz
as
begin
declare @bbb int,@kk char(20)
declare @zzz char(13)
declare @kkk char(20)
select @bbb=1
declare cur_bt cursor for select rcdat1 from zzztest where code="00000006" for update of rcdat1,rcdat3
open cur_bt
fetch cur_bt into @kk
while @@sqlstatus = 0
begin
select @zzz="0001-"+replicate("0",8-char_length(convert(varchar,@bbb)))+convert(varchar,@bbb)
select @kkk="测试人"+convert(varchar,@bbb)
update zzztest set rcdat1=@zzz,rcdat3=@kkk where current of cur_bt
select @bbb=@bbb+ convert(int,FLOOR(1 + (RAND() * 6)))
fetch cur_bt into @kk
end
close cur_bt
deallocate cursor cur_bt
end
首先:要更新的表中需有唯一索引或主键
其次:Declare cursor中的sql语句不可加group by having 或order by之类语句,不然会变为只读游标,在for update时会报错。
顺便赠送:convert(int,FLOOR(0 + (RAND() * 6))) 是一个生成0-6随机整数的函数。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/259.html
