仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 817|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之利用游标批量变动/添补数据表中的纪录值...

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。数据|游标
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:
declareMyTestCursorcursor
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中的一个变量,上面是SQLserverBooksonline上的注释:

ReturnsthestatusofthelastcursorFETCHstatementissuedagainstanycursorcurrentlyopenedbytheconnection.

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

DECLAREEmployee_CursorCURSORFORSELECTLastName,FirstNameFROMNorthwind.dbo.EmployeesOPENEmployee_CursorFETCHNEXTFROMEmployee_CursorWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROMEmployee_CursorENDCLOSEEmployee_CursorDEALLOCATEEmployee_Cursor
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-19 11:45:51 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
柔情似水 该用户已被删除
板凳
发表于 2015-1-24 12:38:36 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
蒙在股里 该用户已被删除
地板
发表于 2015-2-1 11:44:28 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
飘灵儿 该用户已被删除
5#
发表于 2015-2-7 04:34:37 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
老尸 该用户已被删除
6#
发表于 2015-2-20 13:57:02 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
透明 该用户已被删除
7#
发表于 2015-3-6 17:42:12 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
若相依 该用户已被删除
8#
发表于 2015-3-13 04:48:32 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
admin 该用户已被删除
9#
发表于 2015-3-20 13:11:21 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表