蓝派网(www.lan27.com)-精选网络资源,分享和交流! 文章首页站内搜索在线手册广告代码酷站欣赏万年历
您现在的位置: 蓝派网 >> 文章中心 >> 数据库 >> MS-SQL >> 正文

Microsoft SQL Server 2005 存储过程翻页(使用ROW_NUMBER函数)性能

作者:佚名    文章来源:网络    更新时间:2008-10-29 19:16:48

Create Procedure [dbo].[lan27_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


发表评论】【打印此文】【关闭窗口】【点击数:
★好玩的休闲小游戏★

本 栏 推 荐

本 栏 热 门

站 内 推 荐

图 文 推 荐