Set @SqlText='select * from (select top '+CAST(@PageNumber*@PageSize AS varchar(30))+' row_number()over(order by '+@strOrder+') as row_no, '+ @QuerySql+' )as a where row_no >'+CAST((@PageNumber-1)*@PageSize AS varchar(30))反复看了几遍,有些地方还是不懂!希望各位高手能详细讲解一下!谢谢了!!

解决方案 »

  1.   

    'select * from (select top '+CAST(@PageNumber*@PageSize AS varchar(30))+' row_number()over(order by '+@strOrder+') as row_no, '+ @QuerySql+' )as a where row_no >'+CAST((@PageNumber-1)*@PageSize AS varchar(30))
    看来是SQL2005版本+,第一个from后的查询是查出当前页数的所有记录,例如页数是2,每页10条,那么查出来的就是20条记录,其中的row_num() over (order by '+@strOrder+') as row_no 这个就是记录当前数据行数,所以在最外层把第1页已显示的记录除去了。其实也可以按 between and来弄,具体如下:
    'select * from (select row_number()over(order by '+@strOrder+') as row_no, '+ @QuerySql+' )as a where row_no between '+CAST(((@PageNumber-1)*@PageSize+1) AS varchar(30))+' and '+CAST(@PageNumber*@PageSize AS varchar(30))
      

  2.   

    row_number()over(order by '+@strOrder+') as row_no中的as row_no
    还有as a都是什么意思啊?!
      

  3.   


    还有as a都是什么意思啊?!
    as给某个字段表等对象重命名,取了一个临时的名字