sqlserver分页存储过程实例


  本文标签:sqlserver分页

  在SQL数据库中,经常需要用到分页,下面就将为您示例sqlserver分页存储过程的建立,供您参考  。如果您在sqlserver分页方面遇到过问题,不妨一看,相信对您更好掌握sqlserver分页会有帮助  。

  1. create proc commonPagination   
  2. @columns varchar(500), --要显示的列名,用逗号隔开   
  3. @tableName varchar(100), --要查询的表名   
  4. @orderColumnName varchar(100), --排序的列名   
  5. @order varchar(50), --排序的方式,升序为asc,降序为 desc   
  6. @where varchar(100), --where 条件,如果不带查询条件,请用 11=1   
  7. @pageIndex int, --当前页索引   
  8. @pageSize int, --页大小(每页显示的记录条数)   
  9. @pageCount int output --总页数,输出参数   
  10. as   
  11. begin   
  12. declare @sqlRecordCount nvarchar(1000) --得到总记录条数的语句   
  13. declare @sqlSelect nvarchar(1000) --查询语句   
  14. set @sqlRecordCount=Nselect @recordCount=count(*) from    
  15. +@tableName +  where + @where   
  16. declare @recordCount int --保存总记录条数的变量   
  17. exec sp_executesql @sqlRecordCount,N@recordCount int output,@recordCount output   
  18. --动态 sql 传参   
  19. if( @recordCount % @pageSize = 0) --如果总记录条数可以被页大小整除   
  20. set @pageCount = @recordCount / @pageSize --总页数就等于总记录条数除以页大小   
  21. else --如果总记录条数不能被页大小整除   
  22. set @pageCount = @recordCount / @pageSize + 1 --总页数就等于总记录条数除以页大小加1   
  23. set @sqlSelect =   
  24. Nselect +@columns+ from (   
  25. select row_number() over (order by    
  26. +@orderColumnName+ +@order   
  27. +) as tempid,* from    
  28. +@tableName+ where + @where   
  29. +) as tempTableName where tempid between    
  30. +str((@pageIndex - 1)*@pageSize + 1 )   
  31. + and +str( @pageIndex * @pageSize)   
  32. exec (@sqlSelect) --执行动态Sql   
  33. end   
  34. go   
  35. --以下是调用示例   
  36. use pubs   
  37. go   
  38. declare @pageCount int   
  39. exec commonPagination   
  40. job_id,job_desc,jobs,job_id,   
  41. asc,11=1,2,2,@pageCount output   
  42. select 总页数为: + str(@pageCount)  
  43. 详细出处参考:http://www.jb51.net/article/19936.htm