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

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

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

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

时间: 2024-09-18 07:39:01

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

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

需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 , 但每个项目不能一样,否则容易看出问题,呵呵 . 复制代码 代码如下: DECLARE @Id varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id FROM dbo.kinpanAwardProject where session=9) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FRO

SQL查询数据库中符合条件的记录的总数_MsSql

1. select count(*) from table; //统计元组个数 2. select count(列名) from table; //统计一列中值的个数 3. select count(*) from table where 字段 = ""; //符合该条件的记录总数 4. sql_count = "select count(*) from article a where 1=1 "; //这条语句中a就代表article 这张表,后面可以写a.字段来

mybatis-Mybatis操作Oracle数据库:批量修改成功后返回的值是-1?

问题描述 Mybatis操作Oracle数据库:批量修改成功后返回的值是-1? Mapper.xml <update id="updateByMultiConditions" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="begin"

sql-access查询符合条件的记录

问题描述 access查询符合条件的记录 怎样用sql语言以表2中group字段中"a"为条件查询表1的记录,表3为结果. 表1 id name zid 1 王朝 1,2,3,5,6 2 马汉 2,5,9 3 张龙 1,6,12,15,18 4 赵虎 2,6,23,25 5 奥巴马 3,6,8,15,19 表2 id group zid 1 a 1 2 a 3 3 a 6 4 a 8 5 b 12 6 b 2 7 b 15 8 b 19 9 b 23 表3 id name zid 1

MSSQL数据库逻辑文件名修改与查看

  逻辑文件名是什么 你用的程序连接的时候使用的是数据库名,然后你在你的数据库右击属性的时候,左上角单击"文件",可以看到,数据库名和逻辑文件名是不一样的,你可以看自己的数据库的路径下的数据库文件 例,SQL查询与修改数据库逻辑文件名,移动数据库存储路径示例 .  代码如下   ---------------------------------------------------------------------------------- -- Author : htl258(Ton

MyBatis学习 之 七、mybatis各种数据库的批量修改

    MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚.   二.MSSQL的SQL语句 WITH R AS( SELECT 'John' as name, 18 as age, 42 as id UNION ALL SELECT 'Mary' as name, 20 as age,

新手求教 php查询 遍历数据库 多条符合条件数据输出的记录只有一条

问题描述 新手求教 php查询 遍历数据库 多条符合条件数据输出的记录只有一条 ($result = 0;//搜索结果默认值(不搜索) 1=正确搜索到结果2=搜索到结果但非第一次3=没搜索到结果4=系统提示) if($msg0 == 1){ ///号信息 $sql=""select * from tgs_code where bianhao='$bianhao'""; //sql语句在数据库查询可返回多条记录 ///echo $sql; $res=mysql_que

数据库-mysql查询语句批量修改的问题

问题描述 mysql查询语句批量修改的问题 在数据库中查询出地址为北京的数据,然后把这些数据的电话号码前面都加上010 解决方案 假设电话号码的字段名叫phone_num XXX是符合地址为北京的条件 update 表名 set phone_num=concat('010',phone_num) where XXX; 解决方案二: update table set xxx where yyy 解决方案三: update (select phone_num 表名 where phone_num n

asp实现获取MSSQL数据库表指定条件行数的函数

 这篇文章主要介绍了asp实现获取MSSQL数据库表指定条件行数的函数的的相关资料,需要的朋友可以参考下       代码如下: '数据库表行数函数,这是取表的行数 Function GetTblRows(TblName) '如果TblName表名值为空,则 if TblName="" Then GetTblRows="未知TblName" exit Function Else set rec = server.createobject("adodb.re