CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

关于游标的问题。谢谢回复!

楼主myblueeye(蓝眼睛)2003-12-02 09:49:44 在 MS-SQL Server / 疑难问题 提问

有一个存储结构,其主要为实现如下功能:  
   
  (1)针对数据库中的某一个数据表(例如Clients表)建立一个游标;  
  (2)将游标定位到某条记录上(例如第125条记录);  
  (3)以该条记录为起始点,将由此向下的25条记录一并以结果集的形式返回给  
            前台应用;  
  (4)前台应用将以(ADO.NET---DataReader)读取后台数据库传来的信息;  
   
   
  请问对于这样的一个存储过程,在第三条(3)方面将具体如何实现呢?  
   
   
  谢谢回复! 问题点数:50、回复次数:11Top

1 楼sunsunup(細水長流)回复于 2003-12-02 09:56:49 得分 0

在cursor中,   可以將接下來的25條記錄插入到一個temp表中,再返回不行嗎Top

2 楼realgz(realgz)回复于 2003-12-02 10:01:24 得分 0

暂时只想到楼上的方法。Top

3 楼pengdali()回复于 2003-12-02 10:03:01 得分 0

select   IDENTITY(int,   1,1)   AS   ID_Num,*   into   #temp   from   表  
  select   *   from   #temp   where   ID_Num   between   10   and   20  
  Top

4 楼pengdali()回复于 2003-12-02 10:04:23 得分 0

(1)针对数据库中的某一个数据表(例如Clients表)建立一个游标;  
  (2)将游标定位到某条记录上(例如第125条记录);  
  declare   cursor_insert   scroll   cursor   for   select   *   from   你的表  
  open   cursor_insert  
  fetch   ABSOLUTE   125   from   cursor_insert   into   @xxx  
  close   cursor_insert  
  deallocate   cursor_insertTop

5 楼pengdali()回复于 2003-12-02 10:05:16 得分 20

CREATE   PROCEDURE   GetProductsPaged  
  @lastProductID   int,  
  @pageSize   int  
  AS  
  SET   ROWCOUNT   @pageSize  
  SELECT   *  
  FROM   Products  
  WHERE   [standard   search   criteria]  
  AND   ProductID   >   @lastProductID  
  ORDER   BY   [Criteria   that   leaves   ProductID   monotonically   increasing]  
  GOTop

6 楼wzh1215(懒猫)回复于 2003-12-02 10:07:57 得分 0

select   IDENTITY(int,   1,1)   AS   ID_Num,*   into   #temp   from   表  
  declare   @current   int  
  exec('select   top   25   *   from   #temp   where   ID_Num>'+convert(varchar(10),@current))Top

7 楼LoveSQL(努力奋斗ing)回复于 2003-12-02 10:08:32 得分 0

其实你完全可以不用游标  
  select   identity(int,1,1)   id   ,*   into   #tmp   from   clients  
   
  select   top   25   *   from   #tmp   where   id>=125   order   by   id  
   
  这样就行了。  
   
  如果非要使用游标,就的每次去一条记录,然后插到一个临时表里,最后  
  一起返回给前台一个结果集,但是效率不高。Top

8 楼wzh1215(懒猫)回复于 2003-12-02 10:12:25 得分 0

select   IDENTITY(int,   1,1)   AS   ID_Num,*   into   #temp   from   表  
  declare   @current   int  
  set   @current=125  
  exec('select   top   25   *   from   #temp   where   ID_Num>='+convert(varchar(10),@current))Top

9 楼Rotaxe(程序员)回复于 2003-12-02 10:21:07 得分 30

不用游标,如果表已有id,可用  
  select   top   25   *   from   clients   where   [id]   not   in(select   top   125   [id]   from   clients   order   by   [id])   order   by   [id]Top

10 楼myblueeye(蓝眼睛)回复于 2003-12-02 11:31:01 得分 0

首先感谢各位的回复及指教!!  
  仔细阅读了众为位的回复,主要解决途径为两种,其一是建立临时表;其二是针对数据表中的带有ID类型的数据列,用SELECT查询语句输出结果集。  
  针对这两种类型的解决方法,我仍有些疑问:  
  首先这个存贮过程主要用于WEB应用中,主要用于所有DataList的自定义分页显示,该过程主要有以下特点:  
  (1)该存储过程被访问执行的频次非常高,以及会同时有很多的并发访问执行该存储过程;如果采用全局临时表的形式,对于所有并发的访问将不能正常执行,并且会出现对该表访问上的冲突;如果采用本地临时表的形式,理论上将会为每个并发连接在TempDB库中创建一个临时的表,如果并发量大的话,在数据访问性能上将不会允许如此创建,并且在TempDB库中也不允许创建名称重复的临时数据表,因此对于该过程采用临时表好象不可以!  
  (2)由于WEB应用在运行过程中,将对数据库中有众多个表进行类似的访问,针对每个表都编制一个本帖首项中提到的实现(1)、(2)、(3)功能的存储过程虽然可以可行,但是仅仅是因为数据表名称的不同而不能将所有功能完全一样的存储过程进行整合,好象显得代码比较冗余及重复,因此该存储过程将以参数输入的性质,将每次需要访问的数据表名称输入到过程中,并且采用动态SQL的执行形式为该输入名称的表建立游标,这个功能实现上已经没问题。  
   
      至于Rotaxe(程序员)   提出的:  
      不用游标,如果表已有id,可用  
  select   top   25   *   from   clients   where   [id]   not   in(select   top   125   [id]   from   clients   order   by   [id])   order   by   [id]  
   
      以及   pengdali(大力   V3.0)提出的:  
  CREATE   PROCEDURE   GetProductsPaged  
  @lastProductID   int,  
  @pageSize   int  
  AS  
  SET   ROWCOUNT   @pageSize  
  SELECT   *  
  FROM   Products  
  WHERE   [standard   search   criteria]  
  AND   ProductID   >   @lastProductID  
  ORDER   BY   [Criteria   that   leaves   ProductID   monotonically   increasing]  
  GO  
   
   
    正在测试中,希望可以。同时针对这个存储过程的上述两个特点,希望经验丰富的朋友们不吝赐教!!  
       
   
  Top

11 楼ujjcel()回复于 2003-12-02 15:01:29 得分 0

upTop

相关问题

  • 游标
  • 游标
  • 游标?
  • 关于“游标”
  • 关于游标
  • 游标使用
  • 游标问题!
  • 关于游标
  • 游标疑问
  • 游标使用?

关键词

  • 存储过程
  • 数据库
  • 执行
  • 游标
  • 表
  • 数据表
  • 回复
  • 临时
  • 记录
  • 并发

得分解答快速导航

  • 帖主:myblueeye
  • pengdali
  • Rotaxe

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo