实现千万级数据的分页显示

来源:互联网 发布:sqlserver费用 编辑:程序博客网 时间:2024/05/17 23:15
  1. CREATE PROCEDURE GetRecordFromPage
  2.     @tblName      varchar(255),       -- 表名
  3.     @fldName      varchar(255),       -- 字段名
  4.     @PageSize     int = 10,           -- 页尺寸
  5.     @PageIndex    int = 1,            -- 页码
  6.     @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
  7.     @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
  8.     @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
  9. AS
  10. declare @strSQL   varchar(6000)       -- 主语句
  11. declare @strTmp   varchar(100)        -- 临时变量
  12. declare @strOrder varchar(400)        -- 排序类型
  13. if @OrderType != 0
  14. begin
  15.     set @strTmp = "<(select min"
  16.     set @strOrder = " order by [" + @fldName +"] desc"
  17. end
  18. else
  19. begin
  20.     set @strTmp = ">(select max"
  21.     set @strOrder = " order by [" + @fldName +"] asc"
  22. end
  23. set @strSQL = "select top " + str(@PageSize) + " * from ["
  24.     + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
  25.     + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
  26.     + @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
  27.     + @strOrder
  28. if @strWhere != ''
  29.     set @strSQL = "select top " + str(@PageSize) + " * from ["
  30.         + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
  31.         + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
  32.         + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
  33.         + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
  34. if @PageIndex = 1
  35. begin
  36.     set @strTmp = ""
  37.     if @strWhere != ''
  38.         set @strTmp = " where " + @strWhere
  39.     set @strSQL = "select top " + str(@PageSize) + " * from ["
  40.         + @tblName + "]" + @strTmp + " " + @strOrder
  41. end
  42. if @IsCount != 0
  43.     set @strSQL = "select count(*) as Total from [" + @tblName + "]"
  44. exec (@strSQL)
  45. GO