分享
 
 
 

使用游标批量更改/填充数据表中的记录值(The Using of Cursor)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Author:David Euler

Date: 2004/09/28

Email:de_euler-david@yahoo.com.cn

有任何问题,请与我联系:)

数据库测试中,常常需要对数据库中的表进行填充或者批量更改数据的操作,可以通过游标来实现对每一个查询记录的操作,通过rand()函数的使用获得随机数,将随机数插入到表中,即可更新或填充数据表。

这里涉及到游标的使用,使用游标大体需要经过以下几个步骤:

1.定义游标:declare cursor

2.打开游标:open cursor

3.取得游标中单个的记录,并将记录中的字段赋值给变量。fetch cursor

(每取一个值,游标会自动前移)

4.循环读取游标,并对每一个记录进行处理。fetch与fetch next 是等价的。

5.关闭并释放游标,close cursor, deallocate cursor。

下面给出一个批量更改数据库中记录的例子,这个例子把价目表中所有料品的价格用0到100之间的数值更新,原价目表中所有料品的价格都为0,更新之后所有的价格都是0到100之间的随机数:

use GuruERP

-- 定义游标MyTestCursor:

declare MyTestCursor cursor

for select PGI_ITM_CODE,PGI_ListPrice from TBLPRICELISTGROUPITEM

/*从表中选取两个字段*/

/* 表TBLPRICELISTGROUPITEM中的字段PGI_ITM_CODE是Unique Key */

-- 打开游标MyTestCursor:

open MyTestCursor

declare @PGI_ITM_CODE char(28)

declare @PGI_ListPrice float

--fetch取出游标所指的记录,并将记录结果存入到变量中:

fetch from MyTestCursor into @PGI_ITM_CODE,@PGI_ListPrice

/***************** begin of loop *******************************/

while @@FETCH_STATUS = 0

Begin

update TBLPRICELISTGROUPITEM set PGI_ListPrice=floor(100*rand()) where PGI_ITM_CODE=@PGI_ITM_CODE

fetch next from MyTestCursor into @PGI_ITM_CODE,@PGI_ListPrice

End

/***************** end of loop *******************************/

select @PGI_ITM_CODE as code ,@PGI_ListPrice as price

/***********关闭游标,释放游标:***************/

close MyTestCursor

deallocate MyTestCursor

再重复一下,使用游标批量更改或填充数据库,大体经过declare,open,fetch,loop fetch,close and deallocate 五个步骤。

备注1:

while循环体以BEGIN开始,以END结束,当条件为真时循环继续,为假则结束

备注2:

@@FETCH_STATUS是sql server中的一个变量,下面是SQL server Books online上的解释:

Returns the status of the last cursor FETCH statement issued against any cursor currently opened by the connection.

Return value

Description

0

FETCH statement was successful.

-1

FETCH statement failed or the row was beyond the result set.

-2

Row fetched is missing.

Examples

This example uses @@FETCH_STATUS to control cursor activities in a WHILE loop.

DECLARE Employee_Cursor CURSOR FOR

SELECT LastName, FirstName FROM Northwind.dbo.Employees

OPEN Employee_Cursor

FETCH NEXT FROM Employee_Cursor

WHILE @@FETCH_STATUS = 0

BEGIN

FETCH NEXT FROM Employee_Cursor

END

CLOSE Employee_Cursor

DEALLOCATE Employee_Cursor

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有