使用Row_Number的分页存储过程

本文介绍了一种使用SQL实现的通用分页存储过程。通过定义输入参数如表名、字段、条件等,该过程能够灵活地应用于不同场景下的数据分页需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页存储过程是非常通用的功能,今天自己写了一个分页存储过程,写下来记录一下。

CREATE TABLE [dbo].[MyTable](
	[Id] [int] NOT NULL,
	[Info1] [nvarchar](50) NULL,
	[Info2] [nvarchar](50) NULL,
	[Info3] [nvarchar](50) NULL,
 CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
分页存储过程

-- =============================================
-- Author:		justin
-- Create date: 2015-2-28
-- Description:	divide page
-- =============================================
ALTER PROCEDURE prc_divpage
	@table  nvarchar(50),
	@fields nvarchar(50),
	@where  nvarchar(50),
	@order  nvarchar(50),
	@index  int,
	@count  int
AS
BEGIN
	declare @start int;
	set @start = (@index-1) * @count;
	declare @sql nvarchar(max);
	set @sql = 'select ' + @fields + ' from '+
	'(select row_number() over (order by ' + @order+ ') as RowNumber,' + 
	@fields + ' from '+ @table +' where '+ @where +')'+
	'as r where r.RowNumber >' + CONVERT(nvarchar(20),@start) + 
	' and r.RowNumber < ' + CONVERT(nvarchar(20),@start+@count+1) + 
	' order by r.RowNumber';
	
	print @sql
	
	exec(@sql);
END
GO




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值