一个高效的数据分页的存储过程 可以轻松应付百万数据

CREATE   PROCEDURE  pageTest   -- 用于翻页的测试
--
需要把排序字段放在第一列

 (
  
@FirstID   nvarchar ( 20 ) = null ,   -- 当前页面里的第一条记录的排序字段的值
   @LastID   nvarchar ( 20 ) = null ,   -- 当前页面里的最后一条记录的排序字段的值
   @isNext   bit = null ,     -- true 1 :下一页;false 0:上一页
   @allCount   int  output,    -- 返回总记录数
   @pageSize   int  output,    -- 返回一页的记录数
   @CurPage   int       -- 页号(第几页)0:第一页;-1最后一页。
  )

AS

if   @CurPage = 0
 
begin
  
-- 统计总记录数
   select   @allCount = count (ProductId)  from  Product_test 
   
  
set   @pageSize = 10
  
-- 返回第一页的数据
   select   top   10  
   ProductId,
   ProductName,
   Introduction   
   
from  Product_test  order   by  ProductId 
 
end

else   if   @CurPage =- 1

 
select   *   from  
  (
select   top   10  ProductId,
   ProductName,
   Introduction

  
from  Product_test  order   by  ProductId  desc  )  as  aa  
  
order   by  ProductId
else

 
begin  
  
if   @isNext = 1
   
-- 翻到下一页
    select   top   10  ProductId,
   ProductName,
   Introduction
  
from  Product_test  where  ProductId  >   @LastID   order   by  ProductId 
   
   
  
else
   
-- 翻到上一页
    select   *   from
    (
select   top   10  ProductId,
   ProductName,
   Introduction
  
from  Product_test  where  ProductId  <   @FirstID    order   by  ProductId  desc as  bb  order   by  ProductId
 
end

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