SQL Server 2005 存储过程翻页(使用ROW_NUMBER)

时间:2015/12/1 10:13:00来源:互联网 作者:flyso 点击: 1004 次

Create Procedure [dbo].[flyso_ListPages]
(
@Page int=1,/*传进页数*/
@Page_Size int=20,/*每页行数*/
@Page_Count int=0,/*页面总数*/
@Row_Count int=0,/*统计行数*/
@Get_Type nvarchar(10),/*返回类型*/
@SQL_Count nvarchar(2000),/*查询语句*/
@SQL_String nvarchar(3000),/*查询语句*/
@SQL_Order nvarchar(1000)/*排序字段*/
)
AS



Set NoCount ON--如果返回记录集,用这句话是个好习惯



/*判断页数*/
IF(@Page='' or @Page<1)
Begin
  Set @Page=1
End

/*判断行数*/
IF(@Page_Size='' or @Page_Size<1)
Begin
  Set @Page_Size=20
End

/*判断是否Count(*)*/
IF(@Page=1 or @Row_Count='' or @Row_Count<1)
Begin
  Set @SQL_Count=N'Select @Row_Count='+@SQL_Count
  Execute sp_executesql @SQL_Count,N'@Row_Count Int Output',@Row_Count output
End

/*页面总数*/
IF(@Row_Count%@Page_Size>0)
  Begin
   Set @Page_Count = (@Row_Count/@Page_Size)+1
  End
Else
  Begin
   Set @Page_Count = @Row_Count/@Page_Size
  End

/*判断首页*/
IF(@Page<1)
Begin
  Set @Page=1
End

/*判断尾页*/
IF(@Page>@Page_Count)
Begin
  Set @Page=@Page_Count
End

IF(@Get_Type='Get_Count')--获取统计信息
Begin
  Select @Page as Page,@Page_Count AS Page_Count,@Row_Count AS Row_Count
  Return
End

IF(@Get_Type='Get_Data')--获取数据记录
Begin
  Declare @List_ID1 int,@List_ID2 int
   Set @List_ID2=(@Page_Size*@Page)--当前页记录结束
   Set @List_ID1=(@List_ID2-@Page_Size)--当前页记录开始
  
  Set @SQL_String=N'Select * From (Select ROW_NUMBER() Over('
      +@SQL_Order
      +N')AS List_ID,'
      +@SQL_String
      +N')AS A Where A.List_ID>'
      +Cast(@List_ID1 AS Nvarchar)
      +N' and A.List_ID<='
      +Cast(@List_ID2 AS Nvarchar)
  Execute sp_executesql @SQL_String
  Return
End

Copyright © 2005 - 2016 flyso.cn. 飞搜 版权所有 鄂ICP备11002783号-3