您的位置:首页 > 数据库 > SQL

使用sql2005的新特性分页的储存过程:Top,Row_Number

2007-03-29 22:55 411 查看
支持多排序字段
使用Top,Row_Number比单使用Row_Number应该要高效率一些吧
请看代码~~~

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create procedure [dbo].[uspCustomPaging]
@TableName varchar(50), --表或视图名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderFields varchar(5000), --排序字段(必须!支持多字段,建议建索引)
@SqlWhere varchar(5000) = '', --条件语句(如and Name='a')
@PageSize int, --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@TotalPages int output --返回总页数
as
begin
declare @sql nvarchar(4000)
declare @TotalRecords int

--计算总记录数及总页数
set @sql = 'select @TotalRecords = count(*) from ' + @TableName + ' where 1=1 ' + @sqlWhere
exec sp_executesql @sql,N'@totalRecords int output',@TotalRecords output
select @TotalPages=CEILING((@TotalRecords+0.0)/@PageSize)

--处理页数超出范围情况
if @PageIndex<=0
set @PageIndex = 1
if @PageIndex>@TotalPages
set @PageIndex = @TotalPages

set @sql = 'select '+ @Fields + ' from (select top(@PageIndex*@PageSize) ' + @Fields + ',row_number() over(order by ' + @OrderFields + ') as rowNumber from ' + @TableName + ' where 1=1 ' + @SqlWhere + ') t where t.rowNumber >= ((@PageIndex-1)*@PageSize+1)'

--print @Sql
exec sp_executesql @sql,N'@PageIndex int, @PageSize int',@PageIndex,@PageSize
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: