通用分页存储过程,干货无污染

本文介绍了一个用于数据库动态分页查询的存储过程实现方法。该存储过程可以根据输入参数灵活地从指定表中获取数据,并支持自定义查询条件、排序方式及分页设置等功能。
---判断是否存在该存储过程
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[WEB_PageView]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[WEB_PageView] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROCEDURE dbo.WEB_PageView @TableName NVARCHAR(200), -- 表名 @ReturnFields NVARCHAR(1000) = '*', -- 查询列数 @PageSize INT = 10, -- 每页数目 @PageIndex INT = 1, -- 当前页码 @Where NVARCHAR(1000) = '', -- 查询条件 @OrderBy NVARCHAR(1000), -- 排序字段 @PageCount INT OUTPUT, -- 页码总数 @RecordCount INT OUTPUT -- 记录总数
AS --设置属性 SET NOCOUNT ON -- 变量定义 DECLARE @TotalRecord INT DECLARE @TotalPage INT DECLARE @CurrentPageSize INT DECLARE @TotalRecordForPageIndex INT BEGIN IF @Where IS NULL SET @Where=N'' -- 记录总数 DECLARE @countSql NVARCHAR(4000) IF @RecordCount IS NULL BEGIN SET @countSql='SELECT @TotalRecord=Count(*) From '+@TableName+' '+@Where EXECUTE sp_executesql @countSql,N'@TotalRecord int out',@TotalRecord OUT END ELSE BEGIN SET @TotalRecord=@RecordCount END SET @RecordCount=@TotalRecord SET @TotalPage=(@TotalRecord-1)/@PageSize+1 SET @CurrentPageSize=(@PageIndex-1)*@PageSize -- 返回总页数和总记录数 SET @PageCount=@TotalPage SET @RecordCount=@TotalRecord -- 返回记录 SET @TotalRecordForPageIndex=@PageIndex*@PageSize EXEC ('SELECT * FROM (SELECT TOP '+@TotalRecordForPageIndex+' '+@ReturnFields+', ROW_NUMBER() OVER ('+@OrderBy+') AS PageView_RowNo FROM '+@TableName+ ' ' + @Where +' ) AS TempPageViewTable WHERE TempPageViewTable.PageView_RowNo > '+@CurrentPageSize) END RETURN 0 GO

  

转载于:https://www.cnblogs.com/Can-daydayup/p/8487877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值