数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
使用游标批量更改/填充数据表中的记录值(The Using of Cursor)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

Author:David Euler
Date: 2004/09/28
Email:[email protected]

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

数据库测试中,常常需要对数据库中的表进行填充或者批量更改数据的操作,可以通过游标来实现对每一个查询记录的操作,通过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



相关文章

相关软件