您的位置:首页 > 数据库

SQL--分页存储过程

2011-07-25 16:31 351 查看
USE [ExamDB]
GO

/****** Object:  StoredProcedure [dbo].[SysPager]    Script Date: 07/25/2011 16:11:01 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

--分页存储过程
CREATE PROCEDURE [dbo].[SysPager]
@TableName VARCHAR(500) ,        --表名
@Fields VARCHAR(5000) = '*' ,    --字段名(全部字段为*)
@OrderField VARCHAR(5000) ,        --排序字段(必须!支持多字段)
@sqlWhere VARCHAR(5000) = NULL ,--条件语句(不用加where)
@pageSize INT ,                    --每页多少条记录
@pageIndex INT = 1 ,            --指定当前为第几页
@totalRecord INT = 0  OUTPUT ,
@TotalPage INT OUTPUT            --返回总页数
AS
BEGIN

BEGIN TRAN --开始事务

DECLARE @sql NVARCHAR(4000) ;

SET @totalRecord =0
IF @totalRecord <= 0
BEGIN
--计算总记录数

IF ( @SqlWhere = ''OR @sqlWhere = NULL)
SET @sql = 'select @totalRecord = count(*) from '+ @TableName
ELSE
SET @sql = 'select @totalRecord = count(*) from ' + @TableName + '  where ' + @sqlWhere

EXEC sp_executesql @sql, N'@totalRecord int OUTPUT', @totalRecord OUTPUT--计算总记录数
END

--计算总页数
SELECT  @TotalPage = CEILING(( @totalRecord + 0.0 ) / @PageSize)

IF ( @SqlWhere = ''
OR @sqlWhere = NULL
)
SET @sql = 'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField + ') as rowId,' + @Fields + ' from '
+ @TableName
ELSE
SET @sql = 'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField + ') as rowId,' + @Fields + ' from '
+ @TableName + ' where ' + @SqlWhere

--处理页数超出范围情况
IF @PageIndex <= 0
SET @pageIndex = 1

IF @pageIndex > @TotalPage
SET @pageIndex = @TotalPage

--处理开始点和结束点
DECLARE @StartRecord INT
DECLARE @EndRecord INT

SET @StartRecord = ( @pageIndex - 1 ) * @PageSize + 1
SET @EndRecord = @StartRecord + @pageSize - 1

--继续合成sql语句
SET @Sql = @Sql + ') as t where rowId between '
+ CONVERT(VARCHAR(50), @StartRecord) + ' and '
+ CONVERT(VARCHAR(50), @EndRecord)
PRINT @sql

EXEC(@Sql)
---------------------------------------------------
IF @@Error <> 0
BEGIN
ROLLBACK TRAN
RETURN -1
END
ELSE
BEGIN
COMMIT TRAN
RETURN @totalRecord ---返回记录总数
PRINT  @totalRecord
END
END

GO


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: