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

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

Author:DavidEuler
Date:2004/09/28
Email:de_euler-david@yahoo.com.cn

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

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

这里涉及到游标的使用,使用游标大体需要经过以下几个步骤:
1.定义游标:declarecursor
2.打开游标:opencursor
3.取得游标中单个的记录,并将记录中的字段赋值给变量。fetchcursor
  (每取一个值,游标会自动前移)
4.循环读取游标,并对每一个记录进行处理。fetch与fetchnext是等价的。
5.关闭并释放游标,closecursor,deallocatecursor。

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

useGuruERP

--定义游标MyTestCursor:
declare MyTestCursorcursor
forselectPGI_ITM_CODE,PGI_ListPricefromTBLPRICELISTGROUPITEM 
/*从表中选取两个字段*/
/*表TBLPRICELISTGROUPITEM中的字段PGI_ITM_CODE是UniqueKey */

--打开游标MyTestCursor:
openMyTestCursor

declare@PGI_ITM_CODEchar(28)
declare@PGI_ListPricefloat

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


/***************** beginofloop*******************************/
while@@FETCH_STATUS=0
Begin 
updateTBLPRICELISTGROUPITEMsetPGI_ListPrice=floor(100*rand())wherePGI_ITM_CODE=@PGI_ITM_CODE
fetchnextfromMyTestCursorinto@PGI_ITM_CODE,@PGI_ListPrice
End   
/***************** endofloop*******************************/

select @PGI_ITM_CODEascode,@PGI_ListPriceasprice

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

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

备注1:
      while循环体以BEGIN开始,以END结束,当条件为真时循环继续,为假则结束
备注2:
      @@FETCH_STATUS是sqlserver中的一个变量,下面是SQL server Booksonline上的解释:

ReturnsthestatusofthelastcursorFETCHstatementissuedagainstanycursorcurrentlyopenedbytheconnection.

ReturnvalueDescription0FETCHstatementwassuccessful.-1FETCHstatementfailedortherowwasbeyondtheresultset.-2Rowfetchedismissing.
Examples
Thisexampleuses@@FETCH_STATUStocontrolcursoractivitiesinaWHILEloop.

DECLAREEmployee_CursorCURSORFORSELECTLastName,FirstNameFROMNorthwind.dbo.EmployeesOPENEmployee_CursorFETCHNEXTFROMEmployee_CursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROMEmployee_CursorENDCLOSEEmployee_CursorDEALLOCATEEmployee_Cursor
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值