在sqlserver中使用游标update数据记录

在sqlserver中使用游标update数据记录,第1张

概述根据测试需要,需改变表ST_RIVER_R中某时间段内数据的字段Z值,并且要求相邻两条数据Z值前后相差正负0.01。 想到了两种方法: 1、最简单的方法,就是直接通过客户端编辑数据库记录 2、使用update命令编辑字段值 第一种方式很简单,就是人为修改,但是由于此表的数据量比较大,客户端的局限性很难找到区间内的数据,所以放弃此方法。 第二种方式,本来用update修改表数据是很简单的一件事情,但

根据测试需要,需改变表ST_RIVER_R中某时间段内数据的字段Z值,并且要求相邻两条数据Z值前后相差正负0.01。

想到了两种方法:

1、最简单的方法,就是直接通过客户端编辑数据库记录

2、使用update命令编辑字段值

第一种方式很简单,就是人为修改,但是由于此表的数据量比较大,客户端的局限性很难找到区间内的数据,所以放弃此方法。

第二种方式,本来用update修改表数据是很简单的一件事情,但是重要的是现在要求前后相邻两条数据Z值有关系,所以简单的update语句无法实现该需求,于是想了下貌似只能用数据库游标来处理了,经研究写了下面一段程序。

写完后经过简单测试脚本没问题,之后手抖的在测试库中执行了下,结果如期而生,搞定!


--预 *** 作的库
USE XZ_GEODB
GO
-- 定义变量
DECLARE @Z numeric(7,3),
@old numeric(7,
@STCD varchar(8),
@TM datetime

--定义游标对象
DECLARE contact_cursor CURSOR FOR

--查询复核要求的结果集
select  Z,STCD,TM from ST_RIVER_R where STCD='hd000917' and TM >='2014-11-05' and TM<='2014-11-06'
FOR UPDATE

--开启游标进行处理
OPEN contact_cursor
--读取第一条记录
FETCH NEXT FROM contact_cursor
INTO @old,@STCD,@TM
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @old

--更新游标所在行的数据
UPDATE ST_RIVER_R SET Z=@old where STCD=@STCD AND TM=@TM

--游标移到下一行
   FETCH NEXT FROM contact_cursor INTO @Z,@TM

--关键在这里: old值为前一行的值加/减0.01
   SET @old=@old+(sign(0.5-RAND())*0.01)
END

--关闭游标
CLOSE contact_cursor
DEALLOCATE contact_cursor
GO

注:以上脚本中有两个点需要考虑,一个是游标的使用,另一个是如何解决正负0.01这个值的随机发生生成。

随机生成0.01:sign(0.5-RAND())*0.01

总结

以上是内存溢出为你收集整理的在sqlserver中使用游标update数据记录全部内容,希望文章能够帮你解决在sqlserver中使用游标update数据记录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/1162697.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存