--@temporderid id排序
--@tablename 表名
--@currentpage 当前页
--@pagesize   每页记录
set @sqlsub='SELECT ROW_NUMBER() OVER('+@temporderid+') as rowNUM,* FROM '+@tablename
set @sql= 'SELECT * FROM ('+@sqlsub+')as b where rowNUM BETWEEN' +str((@currentpage-1)*@pagesize+1)+' AND '+str(@currentpage*@pagesize)+' '+@temporderid
exec(@sql)原来用not in来分页,都说效率很低。。于是我就学习用row number() over,在网上找到了上面的语句,也调试出来了,就是不知道上面两句sql的具体意思是什么?麻烦大家详细的给我解说看看,谢谢了

解决方案 »

  1.   

    因为row_number可以返回行号,所以这个其实就是子查询,通过行号来判断第几条到第几条
      

  2.   

    row_number()产生行号
    OVER() 括号里面的字段  如果用order by 就是排序字段  如果用partition by就是分组字段
    实际上就是按照字段给行号排序  或者按照字段给行号分组然后刚才的行号 介于pagesize*pageindex-1 到 pagesize*pageindex之间 的那些记录 就是 你所需要的