当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 实现上千万条数据的分页显示

MSSQL
如何设置SQL Server数据库全文索引服务
使用SQL Server 2000索引视图提高性能
Sql Server在安装时提示挂起的解决方法
解析SQL Server 2008中的新语句:MERGE
使用SQL Server时最容易忽略的21个问题
讲解SQL Server数据库的触发器安全隐患
轻松掌握执行一个安全的SQL Server安装
如何使用SQL Server中的客户端配置工具
从SQL Server2000升级到2005的过程解析
Sql Server 数据库超时问题的解决方法
解决SQLServer最大流水号的两个好方法
解析:轻松掌握在 Mac OS X中安装MySQL
细化解析:轻松掌握怎样测试 MySQL安装
细化解析:MySQL 服务器究竟有多稳定?
MySQL数据库中与 ALTER TABLE 有关的问题
细化解析:MySQL 数据库中对XA事务的限制
使用MySql和php出现中文乱码的解决方法
Mysql的最大连接数怎样用java程序测试
MySQL列类型的选择与MySQL的查询效率
教你精确编写高质量高性能的MySQL语法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 137 ::
收藏到网摘: n/a

 

-- 获取指定页的数据
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