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

系统 1772 0
本文转自: http://www.wangchao.net.cn/bbsdetail_44678.html
数据库测试中,常常需要对数据库中的表进行填充或者批量更改数据的操作,可以通过游标来实现对每一个查询记录的操作,通过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

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论