环境 :SQL Server 2005表定义:
CREATE TABLE [TBL_1] (
    [COL_1]     [int]         NOT NULL,
    [COL_2]     [int]         NOT NULL,
    [COL_3]     [int]         NOT NULL,
    [COL_4]     [int]         NOT NULL,
    [COL_5]     [datetime] NULL,
    [COL_6]     [datetime] NULL
CONSTRAINT [PK_TBL_1] PRIMARY KEY CLUSTERED (
    [COL_1] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]分页要求:
按条件检索后,并按COL_5,COL_6,COL_2,COL_3,COL_4升序排完序后,进行分页。等等实现:
@strWhere  -- WHERE子句
(@rowNo    -- 当前页的首行行号
(@pageSize -- 一页显示的行数   'SELECT * '
 + 'FROM ( '
 + '    SELECT *, ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4) AS row_no '
 + '    FROM tbl_1 '
 +      @strWhere
 + '    ) AS w1 '
 + 'WHERE w1.row_no >= ' + STR(@rowNo) + ' AND w1.row_no < ' + STR(@rowNo + @pageSize);有没有比上面更有效率的方法?

解决方案 »

  1.   

    ROW_NUMBER() 是你自己写的函数吗?没这语法哈
      

  2.   

    ROW_NUMBER()是SQL Server 2005的新增系统函数。
      

  3.   

    我觉得这样可以了,在建立 row_no 时开销很小(tbl_1表数据不多的情况下)算法也很合理
      

  4.   

    'SELECT *  
     FROM tbl_1 '
     +      @strWhere +' AND  ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4)>= ' + STR(@rowNo) + ' AND ROW_NUMBER() OVER (ORDER BY COL_5,COL_6,COL_2,COL_3,COL_4)< ' + STR(@rowNo + @pageSize); 
    你试下 ,也许会语法错误
      

  5.   

    zhuaiman(米米涨了(︶︿︶)╭∩╮) 
    很可惜,不行。p.s.
    你的名字好有个性啊,不过不像是mm涨了,像是jj涨了。
    哈哈,开玩笑的,别介意。谢谢