通过 sp_cursoropen、sp_cursorfetch、sp_cursorclose实现了分页查询,现在问题是如何能让分页查询的顺序和从企业管理器或查询分析器里查看到的顺序一致?例如declare 
@currentpage int, --当前页 
@pagesize int, --每页行数 
@sqlstr nvarchar(4000)declare @P1 int, --P1是游标的id 
@rowcount int select @currentpage = 1, @pagesize = 5
select @sqlstr = 'select * from tb'
exec sp_cursoropen @P1 output, @sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
set @currentpage=(@currentpage-1)*@pagesize+1 
exec sp_cursorfetch @P1,2,@currentpage,@pagesize 
exec sp_cursorclose @P1意思是怎样让分页出来的顺序和从查询分析器查的select * from tb顺序一样,前提示不用order by

解决方案 »

  1.   

    三个重要的游标sp_cursoropen
    請問這三個存諸過程的作用是什么﹖ 
    sp_cursoropen, sp_cursorfetch, sp_cursorclose 
    API 服务器游标实现 
    SQL Server OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 使用这些特殊的系统存储过程向服务器示意游标操作。 sp_cursoropen 定义与游标和游标选项相关的 SQL 语句,然后生成游标。 
    sp_cursorfetch 从游标中提取一行或多行。 
    sp_cursorclose 关闭并释放游标。 
    sp_cursoroption 设置各种游标选项。 
    sp_cursor 用于请求定位更新。 
    sp_cursorprepare 把与游标有关的 Transact-SQL 语句或批处理编译成执行计划,但并不创建游标。 
    sp_cursorexecute 从由 sp_cursorprepare 创建的执行计划中创建并填充游标。 
    sp_cursorunprepare 废弃由 sp_cursorprepare 生成的执行计划。 
    这些系统存储过程将在使用 API 服务器游标的 ADO、OLE DB、ODBC 和 DB-Library 应用程序的 SQL Server 事件探查器跟踪中显示。这些记录仅供 SQL Server OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 内部使用。应用程序可通过数据库 API 的游标功能来使用这些过程的完整功能。在应用程序中直接指定过程的做法不受支持。 当 SQL Server 在某连接上执行语句时,只有在来自第一个语句的所有结果处理完毕或被取消时,才能在连接上执行其它语句。在使用 API 服务器游标时,这个规则仍然成立,但是从应用程序的角度来看,好象 SQL Server 在一个连接上已经开始支持多个活动语句。这是因为完整的结果集存储在服务器游标中,而仅有的传递给 SQL Server 的语句是对 sp_cursor 系统存储过程的执行。SQL Server 执行这些存储过程,且一旦客户端检索该结果集,它就可以开始执行其它语句。OLE DB 提供程序和 ODBC 驱动程序则在把控制返回给应用程序之前始终检索来自 sp_cursor 存储过程的所有结果集。这使应用程序可以插空在多级活动服务器游标中进行提取操作。