存储过程分页

     CREATE   PROC   [ dbo ] . [ GetRecordsPages ]

    
@pageIndex   int = 1 ,
    
@pageSize   int = 10 ,
    
@tblName   nvarchar ( 600 ),
    
@fldName   nvarchar ( 600 ),
    
@fldkey   nvarchar ( 50 ),
    
@fldSort   nvarchar ( 50 ),
    
@Groupby   nvarchar ( 50 ),
    
@strWhere   nvarchar ( 600 ),
    
@RecordsCount   int  OUTPUT

As
Begin
    
-- SET NOCOUNT ON
     Declare   @BeginIndex   int
    
Declare   @EndIndex   int
    
Declare   @Sql   nvarchar ( 2000 )
    
Declare   @GroupbyString   nvarchar ( 200 )
    
Declare   @OrderbyString   nvarchar ( 200 )
   
    
if ( @strWhere   =   '' )
        
Set   @strWhere   =   ' 1 = 1 '
   
    
Set   @Sql   =   ' Select @totalCounts = Count(*) From  ' + @tblName + '  Where  ' + @strWhere + ''
    
exec  sp_executesql  @Sql , N ' @totalCounts int output ' @RecordsCount  output

    
Select   @BeginIndex   =  ( @pageIndex   -   1 *   @pageSize
    
Select   @EndIndex   =   @pageIndex   *   @pageSize

    
if ( @Groupby   <>  N '' )
        
Set   @GroupbyString   =  N '  Group BY  '   +   @Groupby
    
else
        
Set   @GroupbyString   =  N '   '

    
if ( @fldSort   <>  N '' )
        
Set   @OrderbyString   =  N '  Order BY  '   +   @fldSort
    
else
        
Set   @OrderbyString   =  N '   '


    
Set   @Sql   =  N ' Select * From (Select  ' + @fldName + ' , Row_Number() Over(Order By  ' + @fldKey + ' ) As RowRank  From  ' + @tblName + '  Where  ' + @strWhere + ' ) As TheTable Where RowRank >  ' + Convert ( nvarchar ( 50 ),  @BeginIndex ) + '  And RowRank <=  ' + Convert ( nvarchar ( 50 ),  @EndIndex ) + '   ' + @OrderbyString + '   ' + @GroupbyString + ''
    
print   @Sql
    
exec  ( @Sql )
End
GO

  1. #region 通用存储过程
  2.     CREATE PROCEDURE [dbo].[DXBBS_CommonProc]
  3. @TableName varchar(50),
  4. @Condition nvarchar(500),
  5. @Fields varchar(500),
  6. @CurrentPage int,
  7. @PageSize int,
  8. @OrderField varchar(100),
  9. @OrderType varchar(4)
  10. AS
  11.  set nocount on
  12.  declare @SQL nvarchar(2000)
  13.  if @OrderType = 'Desc'
  14.  begin
  15.     if @Condition = 'None'
  16.     begin
  17.         if @CurrentPage = 1
  18.         begin
  19.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' order by ' + @OrderField + ' desc'
  20.         end
  21.         if @CurrentPage > 1
  22.         begin
  23.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' where ' + @OrderField + '<(select min(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc'
  24.         end
  25.     end
  26.     else
  27.     begin
  28.         if @CurrentPage = 1
  29.         begin
  30.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' desc'
  31.         end
  32.         if @CurrentPage > 1
  33.         begin
  34.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' and ' + @OrderField + '<(select min(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' desc) temp) order by ' + @OrderField + ' desc'
  35.         end
  36.     end
  37.  end
  38.  else
  39.  begin
  40.     if @Condition = 'None'
  41.     begin
  42.         if @CurrentPage = 1
  43.         begin
  44.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' order by ' + @OrderField  + ' asc'
  45.         end
  46.         if @CurrentPage > 1
  47.         begin
  48.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' where ' + @OrderField + ' > (select max(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' order by ' + @OrderField + ' asc) temp) order by ' + @OrderField + ' asc'
  49.         end
  50.     end
  51.     else
  52.     begin
  53.         if @CurrentPage = 1
  54.         begin
  55.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' asc'
  56.         end
  57.         if @CurrentPage > 1
  58.         begin
  59.             set @SQL = 'select top ' + Cast(@PageSize as varchar) + ' ' + @Fields + ' from ' + @TableName + ' ' + @Condition + ' and ' + @OrderField + ' > (select max(' + @OrderField + ') from (select top ' + Cast(@PageSize*(@CurrentPage-1) as varchar) + ' ' + @OrderField + ' from ' + @TableName + ' ' + @Condition + ' order by ' + @OrderField + ' asc] temp) order by ' + @OrderField + ' asc'
  60.         end
  61.     end
  62. end
  63. exec sp_executesql @SQL
  64. #endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值