使用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
使用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
相关文章推荐
- 使用sql2005的新特性分页的储存过程:Top,Row_Number
- sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)
- 使用ROW_NUMBER()的分页存储过程
- 使用Row_Number的分页存储过程
- 使用ROW_NUMBER()的分页存储过程
- SQLServer2005新特性-使用ROW_NUMBER() OVER()来控制分页
- MS-SQL2005使用ROW_NUMBER进行效率分页
- Sql server 2005的分页存储过程,利用ROW_NUMBER()新特性
- SQL2005结合ROW_NUMBER()高效分页存储过程
- Sql server 2005的分页存储过程,利用ROW_NUMBER()新特性
- 使用vs2005的rowNumber对数据实现分页的存储过程。
- 利用SQL2005的row_number()重新写了个自定义分页存储过程
- 使用ROW_NUMBER()的分页存储过程
- 知方可补不足~SQL2005使用ROW_NUMBER() OVER()进行数据分页
- SQL分页查询,纯Top方式和row_number()解析函数的使用及区别
- SqlServer中使用row_number() over实现通用的分页存储过程
- 使用 row_number 对sql server 进行 分页
- 使用SQL2005 递归查询结合Row_Number()实现完全SQL端树排序
- jquery.pagination.js 分页存储过程--基于ROW_NUMBER() OVER()分页
- SQL2005 新特性之一:ROW_NUMBER 函数