http://community.csdn.net/Expert/topic/4986/4986911.xml?temp=.9076959
有你想要的

解决方案 »

  1.   

    CREATE PROC SP_FY
    (
    @PageCount   INT, --第N页
    @PageSize   INT --每页行数
    )
    AS
    DECLARE @sql NVARCHAR(4000),--查询字符串
    @PC   INT,   --PAGE COUNT
    @APC   INT,   --ALL PAGE COUNT
      @P1   INT, --P1是游标的id
    @RowCount  INTSELECT @sql='查询语句'
    print @sql
    EXEC SP_CURSOROPEN @P1 OUTPUT,@sql,@scrollopt=1,@ccopt=1,@RowCount=@RowCount OUTPUT
    SELECT @PC=@PageCount,@APC =CEILING(1.0*@RowCount/@PageSize) 
    SELECT @PageCount=(@PageCount-1)*@PageSize+1
    EXEC SP_CURSORFETCH @P1,16,@PageCount,@PageSize 
    EXEC SP_CURSORCLOSE @P1
    SELECT @RowCount AS 'ROWCOUNT',@APC AS  'ALLPAGECOUNT',@PC AS 'PAGECOUNT'GO现在流行这个
      

  2.   

    http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx
    讲了很多种方法,都很有特色,可以看看.如果就你的题目,还是前面那种效率高点.
      

  3.   

    SP_CURSOROPEN的使用方法,在帮助中找不到, 在baidu找了一下,有相关的英文说明,不错,又学到了一些未知的东西。
      

  4.   

    sql 2005 有新增的 (更简单) 
     
    排名函数为分区中的每一行返回一个排名值。根据所用的函数,某些行可能与其他行接收到相同的值。排名函数具有不确定性。Transact-SQL 提供下列排名函数:RANK
    NTILE
     
    DENSE_RANK
    ROW_NUMBER用 ROW_NUMBER 可以 很容易 分页
    USE AdventureWorks;
    GO
    WITH OrderedOrders AS
    (SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (order by OrderDate)as RowNumber
    FROM Sales.SalesOrderHeader ) 
    SELECT * 
    FROM OrderedOrders 
    WHERE RowNumber between 50 and 60;