//需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 ,
但每个项目不能一样,否则容易看出问题,呵呵 。
DECLARE @Id varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id FROM dbo.kinpanAwardProject where session=9) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @Id; --读取第一行数据(将Id放到@Id变量中) WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Id; --打印数据(Id) UPDATE dbo.kinpanAwardProject SET ProTicketCount = cast( floor(rand()*30) as int)+40 WHERE Id = @Id; --更新数据,使用随机数。 FETCH NEXT FROM My_Cursor INTO @Id; --读取下一行数据(将查询的Id放到@Id变量中) END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 GO
还有一种用法,可能更加好,我认为,如果不需要对id进行判断的话,在修改时就不需要where查询,直接修改游标当前位置会更快。
来自:http://www.cnblogs.com/zengen/archive/2011/08/10/2133423.html
DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor ; --读取第一行数据 WHILE @@FETCH_STATUS = 0 BEGIN --UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新 --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除 FETCH NEXT FROM My_Cursor; --读取下一行数据 END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 GO
查询多个字段值的方法
DECLARE @Id varchar(50) declare @dtime datetime DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id,UpdateTime FROM dbo.PropertyPro) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @Id,@dtime; --读取第一行数据(将Id放到@Id变量中,UpdateTime值放到@dtime中) WHILE @@FETCH_STATUS = 0 BEGIN --select @dtime= UpdateTime from PropertyPro where id=@id; PRINT @Id+' '+cast(@dtime as varchar(30)); --打印数据(Id) update PropertyProFile set UpdateTime=@dtime where proid=@id and UpdateTime is not null; --UPDATE dbo.kinpanAwardProject SET ProTicketCount = cast( floor(rand()*20) as int)+70 WHERE Id = @Id; --更新数据 FETCH NEXT FROM My_Cursor INTO @Id,@dtime; --读取下一行数据(将查询的Id放到@Id变量中) END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 Go
条件判断再操作:
DECLARE @Id varchar(50) --declare @votecount int declare @votesum int declare @voteid varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT distinct pp.Id FROM dbo.PropertyPro pp,PropertyCategory pc where pc.id=pp.classid and (pc.parentid=2 or pc.parentid=3 or pc.parentid=4)) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @Id; --读取第一行数据(将Id放到@Id变量中) WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Id; --打印数据(Id) set @voteid=replace(replace(replace(replace( CONVERT(varchar(100), GETDATE(), 121),'-',''),' ',''),':',''),'.','')+left(replace(newid(),'-',''),10) --select @votecount=count(1) from UserVote where AwardProID=@Id select @votesum=sum(tickets) from UserVote where AwardProID=@Id --查询总赞数 if @votesum is null begin set @votesum=0 end if @votesum<1200 --总赞数小于1200,才删除再初始化赞数 begin delete from UserVote where AwardProID=@Id insert into dbo.UserVote(id,userid,awardproid,votedatetime,tickets)values(@voteid,'1',@Id,getdate(),cast(floor(rand()*1800) as int)+1200+@votesum) end -- UPDATE dbo.kinpanAwardProject SET ProTicketCount = cast( floor(rand()*20) as int)+70 WHERE Id = @Id; --更新数据 FETCH NEXT FROM My_Cursor INTO @Id; --读取下一行数据(将查询的Id放到@Id变量中) END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 go
/*
select top 1000 * from uservote order by votedatetime desc
*/