zoukankan      html  css  js  c++  java
  • mssql数据库游标批量改动符合条件的记录

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

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


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





  • 相关阅读:
    更换笔记本电脑记录数据迁移过程
    solaris下的目录ls不到,却能cd进去
    轻松掌握ORACLE 11GR2的RAC实施
    魏公村口腔医院挂号
    springstrutshibernate学习
    oracle RAC启动序列
    HPUX内存监控
    DOM操作 vs. innerHTML
    oracle导入导出技巧
    jQuery幻灯片带缩略图平移滑动焦点图
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3910005.html
Copyright © 2011-2022 走看看