设为首页 加入收藏

TOP

SQL存储过程分页
2015-07-24 11:05:00 来源: 作者: 【 】 浏览:1
Tags:SQL 存储 过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author: ***
-- Create date: 2014-03-27 20:00
-- Description: 采用最新的 row_number() over 技术高效分页方法
-- =============================================
ALTER PROCEDURE [dbo].[P_Public_Paging]
@TableName Nvarchar(4000), --要显示的表、视图、或是SQL语句
@FieldName nvarchar(4000) = '*', --要显示的字段列表,所有字段是* 大视图最好不要用*
@PageSize int, --每页显示的记录个数(每页条数小于1则修正成10)
@PageIndex int=1, --要显示那一页的记录(当前页小于1或自动修正为1)
@Where nvarchar(2000) = '1=1', --查询条件,不需where
@OrderBy nvarchar(2000), --排序字段,最好是索引字段
@PageCount int = 1 output, --返回分页后的总页数
@RecordCount int =0 output --返回查询到的记录数
AS
BEGIN
Declare @SelectSql nvarchar(4000) --构造Sql查询词句
if @PageSize < 1 set @PageSize = 10--如果小每页大小小于1则修正成10
set @SelectSql = ' select @RecordCount = count(0) from ' + @TableName + ' where ' + @Where
exec sp_executesql @SelectSql ,N'@RecordCount int out ',@RecordCount out
--计算@PageCount的值
if @RecordCount <= @PageSize
set @PageCount = 1
else if @RecordCount % @PageSize = 0
set @PageCount = (@RecordCount / @PageSize )
else
set @PageCount = (@RecordCount / @PageSize ) + 1
--检查@PageIndex的值
if @PageIndex> @PageCount
set @PageIndex= @PageCount
if @PageIndex < 1
set @PageIndex = 1
set @SelectSql = 'select '+@FieldName +'from (' +
'select row_number() over (order by ' + @OrderBy + ') RowID ,' + @FieldName +
' from ' + @TableName + ' where ' + @Where +
') a where a.RowID > ' + cast((@PageIndex -1) * @pageSize as varchar(128)) +
' and a.RowID <= ' + cast(@PageIndex * @pageSize as varchar(128))
exec sp_executesql @SelectSql
select @PageCount,@RecordCount
END
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C3P0数据库连接池使用 下一篇常用sqlserver语句命令

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)
·有没有Java swing教 (2025-12-25 15:19:09)
·Start, Stop, and Di (2025-12-25 14:50:57)
·C语言入门教程:零基 (2025-12-25 14:50:54)