开发者社区> 真爱无限> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mssql数据库游标批量修改符合条件的记录

简介: //需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 , 但每个项目不能一样,否则容易看出问题,呵呵 。 DECLARE @Id varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id FROM dbo.
+关注继续查看

//需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 ,

但每个项目不能一样,否则容易看出问题,呵呵 。


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



3、查询多个字段值的方法




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
*/





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql批量删除表名前缀一样的数据表
mysql批量删除表名前缀一样的数据表
4 0
动态批量删除SQL数据库中的表
动态批量删除SQL数据库中的表
8 0
mysql的插入数据与查询数据
mysql的插入数据与查询数据
37 0
c# MVC框架 对mysql数据库的查询
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianchao7c/article/details/83580918 using System; using System.
1436 0
MYSQL中约束及修改数据表
MYSQL中约束及修改数据表28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNIQUE KEY(唯一约束)    DEFAULT(默认约束)    FOREIGN KEY(外键约束)...
633 0
+关注
真爱无限
主要技术.net sqlserver mysql。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载