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