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 [email protected];

PRINT @Id+‘  ‘+cast(@dtime as varchar(30)); --打印数据(Id)

update PropertyProFile set [email protected] where [email protected] 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 [email protected]

select @votesum=sum(tickets) from UserVote where [email protected]  --查询总赞数

if @votesum is null

begin

set @votesum=0

end

if @votesum<1200  --总赞数小于1200,才删除再初始化赞数

begin

delete from UserVote where [email protected]

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

*/

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

时间: 2024-10-12 14:28:23

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

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_Curs

hibernate连接mysql,查询条件中有中文时,查询结果没有记录,而数据库有符合条件的记录(解决方法)

今天在另一台服务器上重新部署了网站,结果出现了以下问题: ——用hibernate做mysql的数据库连接时,当查询条件中有中文的时候,查询结果没有记录,而数据库中是存在符合条件的记录的. 测试了以下,发现不加条件查询可以查到,加上查询条件包含中文就无法找到记录. 百度发现,以下两篇文章很有帮助. http://gzxabcdefg.blog.163.com/blog/static/23451794201081554816892/ http://bbs.51cto.com/thread-1031

无符合条件的记录,SUM函数返回NULL。返回0而不是Null

但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如下面的方法来处理: SELECT COALESCE(SUM(isnull(filed,0)), 0) as [filed1] FROM table1 行了,这下就不用费事去处理返回结果是否为NULL的情况了. COALESCE 函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,该函数也是SQL中的标准函数.

django在读取数据库时未筛选到符合条件的记录会报错

(1)报错情况如下: DoesNotExist: Publisher matching query does not exist. (2)处理方法: try:    p = Publisher.objects.get(name='Apress')except Publisher.DoesNotExist:    print "Apress isn't in the database yet."else:    print "Apress is in the database.

符合条件的记录有则修改没有则添加的小优化技巧

通常的写法: if(select count(1) from table where id=XXX)=0 insert into XXX else update table set xxx where id=XXX 优化后的写法: update table set xxx where id=XXX if @@rowcount=0 insert into XXX 第一种情况,无论如何都会执行两次操作,第二种情况只会运行一次操作!!

mysql判断表中符合条件的记录是否存在

IF EXISTS( SELECT 1 FROM T_BD_BuildGroupBaseInfo WHERE F_BuildGroupID=P_StructureId LIMIT 1) THEN SET V_isBuildingGroup=1; ELSE SET V_isBuildingGroup=0; END IF; 当然这里limit 1很重要.这要mysql找到一条记录后就不会在往下找了.这里执行所影响的行数不是0就是1,性能提高了不少.

将时间转换成数字,把数字转换成时间,均匀取一定时间间隔(比如每91秒取一条记录)内的符合条件的记录

/****** Script for SelectTopNRows command from SSMS  ******/SELECT  [id]      ,[tagDate],CAST(tagdate as float)*10000000000 as numdate      ,[HZ105_315HH]      ,[HZ105_DO315AI]      ,[HZ105_FI315AI]      ,[HZ105_PH315AI]      ,[HZ105_PI315AI]      ,[

oracle根据多个条件分别修改符合条件的记录

declare i number; temp_sum number; temp_hfmpcode temptable.pubname%type; --temptable.pubname%type指的是temptable表的pubname字段的类型 temp_fullname temptable.pubcode%type; begin select count(*) into temp_sum from temptable b; i := 1; while i<=temp_sum loop --1

mysql随机查询符合条件的几条记录

随机查询,方法可以有很多种.比如,查询出所有记录,然后随机从列表中取n条记录.使用程序便可实现.可是程序实现必须查询出所有符合条件的记录(至少是所有符合条件的记录id),然后再随机取出n个id,查询数据库.但是效率毕竟没有数据库中直接查询得快.下面介绍mysql中怎样随机查询n条记录. 1.最简单的办法order by rand(),示例 select * from question q where q.`level`=1 order by rand() limit 1; 此写法,可以将查询出的