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

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

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

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

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

Create   Procedure   [ dbo ] . [ Common_SoBiGo_Percent_Pagination ]
    
@tblName     varchar ( 255 ) = ' T_Category ' ,              --  表名
     @strGetFields   varchar ( 1000 ) = ' * ' ,        --  需要返回的列 
     @fldName   varchar ( 255 ) = '' ,           --  排序的字段名
     @PageSize     int = 10 ,                  --  页尺寸
     @PageIndex    int = 1 ,                --  页码
     @doCount    bit = 1 ,            --  返回记录总数, 非 0 值则返回
     @orderType   bit = 0 ,          --  设置排序类型, 非 0 值则降序
     @strWhere    varchar ( 1500 ) = ''    --  查询条件 (注意: 不要加 where)
AS
    
Declare   @intResult   Int
    
Begin   Tran
    
-- ---------------------------------------------------------------代码设计--------------------------------------------------------------------
     declare   @strSQL     varchar ( 5000 )        --  主语句
     declare   @strTmp     varchar ( 110 )         --  临时变量
     declare   @strOrder   varchar ( 400 )         --  排序类型
     -- set @tblName='price'
     -- set @StrGetFields='*'--'m_price'+','+'I_merchandiseID'
     -- set @fldname='D_Updatetime'
     -- set @pagesize=1
     -- set @pageIndex=1
     -- set @docount=0
     -- set @orderType=1
     -- set @strWhere='I_MerchandiseID>10'
     if   @doCount   !=   0
    
begin
        
if   @strWhere   != ''
            
set   @strSQL   =   ' select count(*) as Total  from [ '   +   @tblName   +   ' ] where  ' + @strWhere + ''
        
else
            
set   @strSQL   =   ' select count(*) as Total from [ '   +   @tblName   +   ' ] '
    
end   
    
-- 以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
     else
    
begin
        
if   @orderType   !=   0
        
begin
            
set   @strTmp   =   ' <(select min '
            
set   @strOrder   =   '  order by [ '   +   @fldName   + ' ] desc '
            
-- 如果@OrderType不是0,就执行降序,这句很重要!
         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
        
begin
        
-- 以下代码赋予了@strSQL以真正执行的SQL代码
             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
            
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
        
end  
    
end    
    
exec ( @strSQL )
    
Set   @intResult   =   @@ROWCOUNT
    
-- --------------------------------------------------------------------------------------------------------------------------------------------------
     If   @@Error   <>   0
    
Begin
        
RollBack   Tran
        
Return   - 1
    
End
    
Else
    
Begin
        
Commit   Tran
        
Return   @intResult
    
End
GO

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