码迷,mamicode.com
首页 > 其他好文 > 详细

分页存储过程

时间:2015-08-06 12:30:53      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 

/****** Object: StoredProcedure [dbo].[DK_Get_Page_List] Script Date: 08/06/2015 10:33:47 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Author: <DavidKing>
-- Create date: <2011-8-20>
-- Description: <通用分页函数>
-- =============================================
CREATE PROCEDURE [dbo].[DK_Get_Page_List]
@TableName NVARCHAR(MAX), --要显示的表或多个表的连接
@FieldName NVARCHAR(500), --要显示的字段列表
@FieldSort NVARCHAR(200), --排序字段列表或条件,必须输入
@Condition NVARCHAR(1000), --查询条件,不需WHERE,必须输入
@PageSize INT = 20, --每页显示的记录数
@Page INT = 1 , --要显示那一页的记录
@RtnCurpage INT = 1 OUTPUT, --返回显示那一页的记录
@RtnPageCount INT = 1 OUTPUT, --查询结果分页后的总页数
@RtnCount INT = 1 OUTPUT, --查询到的记录数
@RtnMsg NVARCHAR(100) OUTPUT --返回信息
AS
BEGIN
SET NOCOUNT ON;
SET @RtnMsg = ‘‘

BEGIN TRY
DECLARE @Sql NVARCHAR(MAX)
--取得总记录数
SET @Sql = N‘SELECT @Cnt = COUNT(1) FROM ‘ + @TableName + N‘ WHERE ‘ + @Condition
/*
* 输出PING SQL
* SELECT @Sql
*/
EXEC sp_executesql @Sql, N‘@Cnt INT OUTPUT‘, @RtnCount OUTPUT

IF @RtnCount = 0
BEGIN
SET @RtnPageCount = 0
SET @RtnCurpage = 0
SET NOCOUNT OFF
RETURN
END

--取得分页总数
SET @RtnPageCount = (@RtnCount + @PageSize - 1)/@PageSize

--取得当前页值
SET @RtnCurpage = @Page
IF @Page > @RtnPageCount
BEGIN
SET @RtnCurpage = @RtnPageCount
END
IF @Page < 1
BEGIN
SET @RtnCurpage = 1
END

--取得分页记录结果
SET @Sql = N‘ SELECT * FROM ( SELECT ‘ + @FieldName + N‘, ROW_NUMBER() OVER(ORDER BY ‘ + @FieldSort
+ N‘) AS _ROW FROM ‘ + @TableName + N‘ WHERE ‘ + @Condition
+ N‘) _Table WHERE _Table._ROW BETWEEN ‘ + CAST(@PageSize * (@RtnCurpage - 1) + 1 AS NVARCHAR(12))
+ N‘ AND ‘ + CAST(@RtnCurpage * @PageSize AS NVARCHAR(12))
/*
* 输出PING SQL
* SELECT @Sql
*/
EXEC (@Sql)
END TRY
BEGIN CATCH
SET @RtnMsg = ‘系统错误‘
END CATCH

SET NOCOUNT OFF
END

GO

 

分页存储过程

标签:

原文地址:http://www.cnblogs.com/lxf1117/p/4707295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!