数据库分页存储过程(6)

/*
******************************************************************************************
  过程名称:Common_Type_Pagination
  过程功能:
  代码设计:小朱([email protected])
  设计时间:2005-11-3 13:58:26
******************************************************************************************
  功能描述:

******************************************************************************************
  如果您修改了我的程序,请留下修改记录,以便对程序进行维护,谢谢  !!!
==========================================================================================
  修改人            修改时间                修改原因
------------------------------------------------------------------------------------------

==========================================================================================

******************************************************************************************
  备注:
*****************************************************************************************
*/

Create   Procedure   [ dbo ] . [ Common_Type_Pagination ]
    
@tblName     varchar ( 255 ),                --  表名 
     @strGetFields   varchar ( 1000 =   ' * ' ,      --  需要返回的列名  
     @strWhere    varchar ( 1500 =   '' ,          --  查询条件 (注意: 不要加 where) 
     @fldName   varchar ( 255 ) = '' ,               --  排序的字段名 
     @orderType   bit   =   0 ,               --  设置排序类型, 0 值为升序, 非 0 值为降序 
     @pageSize     int   =   10 ,                  --  页尺寸 
     @pageIndex    int   =   1 ,                    --  页码 
     @returnType    bit   =   0                --  设置返回类型,0 值为返回记录集, 非 0 值为返回记录总数 
AS
    
Declare   @intResult   Int
    
Begin   Tran
    
-- ---------------------------------------------------------------代码设计--------------------------------------------------------------------
     declare   @strSQL     varchar ( 5000 )            --  主语句 
     declare   @strTmp     varchar ( 110 )            --  临时变量 
     declare   @strOrder   varchar ( 400 )            --  排序类型 
     if   @returnType   !=   0      --  返回记录总数
     begin
        
if   @strWhere   !=   ''
            
set   @strSQL   =   ' select count(*) as total from [ '   +   @tblName   +   ' ] where  '   +   @strWhere
        
else
            
set   @strSQL   =   ' select count(*) as total from [ '   +   @tblName   +   ' ] '  
    
end
    
else      --  返回记录集
     begin
        
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
        
if   @pageIndex   =   1      -- 如果是第一页就执行以下代码,这样会加快执行速度 
         begin
            
if   @strWhere   !=   ''   
                
set   @strSQL   =   ' select top  '   +   str ( @pageSize +   '   '   +   @strGetFields   +   '   from [ '   +   @tblName   +   ' ] where  '   +   @strWhere   +   '   '   +   @strOrder  
            
else  
            
set   @strSQL   =   ' select top  '   +   str ( @pageSize +   '   '   +   @strGetFields   +   '   from [ '   +   @tblName   +   ' '   +   @strOrder  
        
end
        
else      -- 以下代码赋予了@strSQL以真正执行的SQL代码
         begin
            
if   @strWhere   !=   ''  
                
set   @strSQL = ' select top  '   +   str ( @pageSize +   '   '   +   @strGetFields   +   '   from [ '   +   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '   +   @fldName   +   ' ]) from (select top  '   +   str (( @pageIndex   -   1 *   @pageSize +   '  [ '   +   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] where  '   +   @strWhere   +   '   '   +   @strOrder   +   ' ) as tblTmp) and  '   +   @strWhere   +   '   '   +   @strOrder  
            
else
                
set   @strSQL   =   ' select top  '   +   str ( @pageSize +   '   '   +   @strGetFields   +   '   from [ '   +   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '   +   @fldName   +   ' ]) from (select top  '   +   str (( @pageIndex   -   1 *   @pageSize +   '  [ '   +   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] '   +   @strOrder   +   ' ) as tblTmp) ' +   @strOrder
        
end
    
end
    
exec ( @strSQL
    
Set   @intResult   =   @@ROWCOUNT
    
-- --------------------------------------------------------------------------------------------------------------------------------------------------
     If   @@Error   <>   0
    
Begin
        
RollBack   Tran
        
Return   - 1
    
End
    
Else
    
Begin
        
Commit   Tran
        
Return   @intResult
    
End
GO

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