实现上千万条数据的分页显示

80酷酷网    80kuku.com

  分页|数据|显示

-- 获取指定页的数据
CREATE PROCEDURE GetRecordFromPage
    tblName      varchar(255),       -- 表名
    fldName      varchar(255),       -- 字段名
    PageSize     int = 10,           -- 页尺寸
    PageIndex    int = 1,            -- 页码
    IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
    OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
AS

declare strSQL   varchar(6000)       -- 主语句
declare strTmp   varchar(100)        -- 临时变量
declare strOrder varchar(400)        -- 排序类型

if OrderType != 0
begin
    set strTmp = "<(select min"
    set strOrder = " order by [" + fldName +"] desc"
end
else
begin
    set strTmp = ">(select max"
    set strOrder = " order by [" + fldName +"] asc"
end

set strSQL = "select top " + str(PageSize) + " * from ["
    + tblName + "] where [" + fldName + "]" + strTmp + "(["
    + fldName + "]) from (select top " + str((PageIndex-1)*PageSize) + " ["
    + fldName + "] from [" + tblName + "]" + strOrder + ") as tblTmp)"
    + strOrder

if strWhere != ''
    set strSQL = "select top " + str(PageSize) + " * from ["
        + tblName + "] where [" + fldName + "]" + strTmp + "(["
        + fldName + "]) from (select top " + str((PageIndex-1)*PageSize) + " ["
        + fldName + "] from [" + tblName + "] where " + strWhere + " "
        + strOrder + ") as tblTmp) and " + strWhere + " " + strOrder

if PageIndex = 1
begin
    set strTmp = ""
    if strWhere != ''
        set strTmp = " where " + strWhere

    set strSQL = "select top " + str(PageSize) + " * from ["
        + tblName + "]" + strTmp + " " + strOrder
end

if IsCount != 0
    set strSQL = "select count(*) as Total from [" + tblName + "]"

exec (strSQL)

GO



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: