分页的存储过程

USE [PartyMis]
GO
/****** Object:  StoredProcedure [dbo].[GetOnePageDate]    Script Date: 11/18/2012 22:28:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*  
据调查此方法限制最少,性能最佳  
返回两个表,第一个表包含总行数,第二个表是查询到的记录  
--分页查询的原理:   
--1.先将预分页内容按照排序条件加上自增列导入到临时表中(或表变量)   
--2.针对临时表操作,找到相应的N页对应的自增列编码范围   
--3.根据第N页对应的自增列编码范围,查找第N页内容   
   
--需要注意的是:   
--第一是添加自增列,确定行号   
--第二缩减中间处理过程的操作数据量   
 
*/  


ALTER proc [dbo].[GetOnePageDate]
@page int,
@pagesize int,
@counts int output
as
begin
    select top(@pagesize*@page) ROW_NUMBER() --可以减少处理的数据,加快速度
    over(order by id) as 序号, --按什么字段分页的字段,不需要唯一性
    *  --查询字段
    into #temp --插入临时表
    from T_Party    --查询表名称
    where id >=1    --查询条件
    
        
    set @counts = (select COUNT(*) as counts from T_Party)--总记录条数
    select * from #temp where 序号 >@pagesize*(@page-1) and 序号 <= @pagesize*@page
        
end

你可能感兴趣的:(分页的存储过程)