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

发表于:2007-07-02来源:作者:点击数: 标签:
-- 获取指定页的数据CREATE PROCEDURE GetRecordFromPage @tblNamevarchar(255),-- 表名@fldName varchar(255),-- 字段名@PageSize int = 10,-- 页尺寸@PageIndexint = 1,-- 页码@IsCount bit = 0,-- 返回记录总数, 非 0 值则返回@OrderTypebit = 0,-- 设置

-- 获取指定页的数据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 != 0begin    set @strTmp = "<(select min"    set @strOrder = " order by [" + @fldName +"] desc"endelsebegin    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 = 1begin    set @strTmp = ""    if @strWhere != @#@#        set @strTmp = " where " + @strWhere

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

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

exec (@strSQL)

GO

原文转自:http://www.ltesting.net