存储过程分页

代码
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[UP_GetRecordByPageOrder]') and OBJECTPROPERTY(id, N'IsProcedure'= 1)   
drop procedure [dbo].[UP_GetRecordByPageOrder]   
GO   
  
SET QUOTED_IDENTIFIER ON    
GO   
SET ANSI_NULLS ON    
GO   
  
------------------------------------   
--用途:支持任意排序的分页存储过程     
--说明:   
------------------------------------   
  
CREATE        PROCEDURE UP_GetRecordByPageOrder   
    
 @tblName varchar(
255),   -- 表名    
 @OrderfldName varchar(
255),  -- 排序字段名    
 @PageSize 
int = 10,   -- 页尺寸    
 @PageIndex 
int = 1,   -- 页码    
 @IsReCount bit 
= 1,   -- 返回记录总数, 非 0 值则返回    
 @OrderType bit 
= 1,   -- 设置排序类型, 非 0 值则降序    
 @strWhere varchar(
1000)=''   -- 查询条件 (注意: 不要加 where)    
AS    
  
 declare @strSQL varchar(
6000)  -- 主语句    
 declare @strTmp varchar(
400)   -- 临时变量    
 declare @strOrder varchar(
400)  -- 排序类型    
  
if @OrderType != 0    
 begin    
  
set @strTmp = '<(select min'    
  
set @strOrder = ' order by [' + @OrderfldName +'] desc'    
 end    
else    
 begin    
  
set @strTmp = '>(select max'    
  
set @strOrder = ' order by [' + @OrderfldName +'] asc'    
 end    
  
set @strSQL = 'select top ' + str(@PageSize) + ' *  from ['    
 
+ @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['    
 
+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['    
 
+ @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'    
 
+ @strOrder    
  
if @strWhere != ''    
 
set @strSQL = 'select top ' + str(@PageSize) + ' *  from ['    
 
+ @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['    
 
+ @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['    
 
+ @OrderfldName + '] 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 @IsReCount != 0    
    
set @strSQL = @strSQL+' select count(1) as Total from [' + @tblName + ']'  
  
if @strWhere!=''  
    
set @strSQL = @strSQL+' where ' + @strWhere   
print(@strSQL)   
exec (@strSQL)   
GO   
SET QUOTED_IDENTIFIER OFF    
GO   
SET ANSI_NULLS ON    
GO  

本文来自CSDN博客,转载请标明出处:http:
//blog.csdn.net/huyou1983218/archive/2009/07/28/4387158.aspx

 

posted on 2010-03-10 11:22  孟凡龙  阅读(153)  评论(0)    收藏  举报