存储过程分页

    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、付费专栏及课程。

余额充值